AOP を使用して、Web サイトの BLL レイヤーのすべてのメソッドにキャッシュ機能を適用したいと考えています。以下のように:
[Cacheable(new string[] { "id" }, GroupName = "UserInfoByID", LiveTime = "00:05:00")]
public UserInfo GetUserInfoByID(int id)
{
return UserDAO.GetUserInfo(id);
}
Cacheable
attributeの最初の引数は、メソッドのどの引数を使用してキャッシュ キーを作成するかを決定します。2 番目の引数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
1 つずつ生成し、すべてを消去する必要がありますか? 非常に単純なケースですが、高性能キャッシュを考慮すると複雑すぎますか。リストクエリメソッドがあるとします:
[Cacheable(new string[] { "regionID" }, GroupName = "UserList", LiveTime = "00:05:00")]
public List<UserInfo> GetUserList(int regionID)
{
List<UserInfo> result = UserDAO.GetUserList(regionID);
return result;
}
ユーザーのステータスを無効に変更した場合、上記の方法でキャッシュを更新するにはどうすればよいですか?