我想使用AOP將緩存功能應用於我網站中BLL圖層的所有方法。 就像下面:緩存管理的最佳實踐
[Cacheable(new string[] { "id" }, GroupName = "UserInfoByID", LiveTime = "00:05:00")]
public UserInfo GetUserInfoByID(int id)
{
return UserDAO.GetUserInfo(id);
}
Cacheable
屬性的第一個參數計算出該方法的精氨酸將被用於創建緩存鍵。第二個參數GroupName
計算出緩存鍵的前綴。如上例所示,將生成一個鍵 - 「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
一個一個地生成密鑰並清除所有密鑰?考慮到高性能緩存,它是否太複雜,儘管它只是一個非常簡單的例子。假設我有一個列表查詢mehod:
[Cacheable(new string[] { "regionID" }, GroupName = "UserList", LiveTime = "00:05:00")]
public List<UserInfo> GetUserList(int regionID)
{
List<UserInfo> result = UserDAO.GetUserList(regionID);
return result;
}
如果我更改用戶的狀態爲disactiviated,如何刷新上述方法的緩存?