2012-08-09 2 views
0

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 키를 하나씩 생성하고 모두 제거해야합니까? 매우 간단한 경우 일지라도 고성능 캐시를 고려하면 너무 복잡합니다.

[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에 대한 사용자의 상태를 변경하는 경우, 어떻게 내가 위의 방법의 캐시를 새로 고칠 수 있습니다 : 나는 목록 쿼리 mehod을 치죠?

답변

0

언젠가 이전에 작은 AOP 캐싱 fw (MbCache)를 만들었는데, 여기에서 무효화는 구성 문제가 아닌 "명시 적"작업이되도록했습니다. 일을 훨씬 쉽게 만들어주었습니다.

비록이 fw가 속성이 아닌 코드 설정을 사용한다고해도 (개인적인 견해 - 개인적 견해와는 다른 이유로 속성을 좋아하지 않습니다.), 같은 것이 여기에 적용될 수 있습니다. 어쩌면 PurgeCacheAttribute를 제거하고 그 대신에 일부 런타임 작업/메소드로 보냅니 까?

이것은 invalidation이 MbCache로 만들어진 방법입니다. 몇 가지 아이디어가 있습니까?