我想使用 AOP 将缓存功能应用于我网站中 BLL 层的所有方法。就像下面这样:
[Cacheable(new string[] { "id" }, GroupName = "UserInfoByID", LiveTime = "00:05:00")]
public UserInfo GetUserInfoByID(int id)
{
return UserDAO.GetUserInfo(id);
}
属性的第一个参数Cacheable
确定方法的哪个参数将用于创建缓存键。第二个参数GroupName
计算出缓存键的前缀。如上例,将生成一个key-“UserInfoByID(123)”(假设查询id为123)。我创建另一个属性:
[PurgeCache(new string[] { "userInfo.ID" }, GroupName = "UserInfoByID")]
public void UpdateUserInfo(UserInfo userInfo)
{
UserDAO.UpdateUserInfo(userInfo);
}
它将使用 userInfo.ID 和相同的 GroupName-UserInfoByID
来生成相同的键来清除缓存:UserInfoByID(123)
。使用起来简单又优雅吗?然而,有一个非常棘手的问题。我有另一种方法:
public void ManageUser(int[] userID, int status)
{
UserDAO.ManageUser(userID, status);
}
该方法用于更改用户的状态。执行后如何刷新缓存?int[] userID
我应该一一生成密钥并清除所有密钥吗?考虑到高性能缓存是否过于复杂,即使它只是一个非常简单的案例。假设我有一个列表查询方法:
[Cacheable(new string[] { "regionID" }, GroupName = "UserList", LiveTime = "00:05:00")]
public List<UserInfo> GetUserList(int regionID)
{
List<UserInfo> result = UserDAO.GetUserList(regionID);
return result;
}
如果我将用户的状态更改为已停用,如何刷新上述方法的缓存?