2014-03-13 3 views
0

메모리 캐시에서 기본 ASP.NET을 사용하므로 내부적으로 키 - 값 쌍을 사용하기 위해 사전 <을 사용합니다. 그러나 Azure 캐시 나 외부 캐시와 같은 외부 캐싱 솔루션은 데이터를 직렬화하여 메모리 솔루션과는 다른 상황을 만듭니다. 아래 예제에서, 나는 List 객체를 key로 잡고 그것을 업데이트한다.캐싱이 복잡한 개체 변경을 감지하고 캐시 데이터를 효율적으로 업데이트하는 방법

var users = new List<User>(); 
HttpContext.Cache.Insert("key", users); 
users.Add(new User());//cached list will update itself with this insertion ? 
var cachedUsers = (List<User>) HttpContext.Cache["key"];// now i got users list object reference or copied users list without inserted user ? 

나는 선에 댓글로하는 경우는 캐시가 사용자 목록 참조를 보유하지만 난 푸른 캐시 솔루션 같은 외부 캐시 솔루션을 사용하는 경우 응답이 변화하고 있음을 명확하게 알 수 있도록 ASP.NET의 메모리 캐시 솔루션에서이 시나리오를 사용 기본 . 개체 참조를 캐싱하는 대신 개체를 serialize하는 외부 솔루션을 사용하는 경우 다음 질문에 대한 대답은 무엇입니까?

캐시 된 목록 자체가 해당 삽입으로 업데이트됩니까?

캐시에서 데이터를 다시 가져 오는 경우 사용자 목록 개체 참조 또는 삽입 된 사용자가없는 복사 된 사용자 목록일까요?

답변

3

메모리에 데이터를 저장하는 캐시에서 사용자 목록이 업데이트됩니다. 분명히 데이터를 직렬화하는 캐시 저장소에서 사용자 목록에 새로 추가 된 사용자가없는 목록이 포함됩니다.

캐시 값을 캐시에 삽입 한 후 캐시 값을 업데이트하는 것은 나쁜 습관입니다. 나중에 다른 유형의 캐시로 이동하려면 어떻게해야합니까? 캐싱중인 데이터가 변경되면 캐시를 무효화하고 다시 채 웁니다. 구현에 의존하지 마십시오.

+0

시나리오를 추가하거나 일부 scenarious에서 목록 개체를 삭제하면 캐시의 전체 목록을 업데이트해야합니까? 따라서 하나의 추가 또는 삭제 작업에 대해 매우 큰 목록을 업데이트하면 성능에 큰 영향을 미치지 않을 것입니다. – Freshblood

+0

자주 업데이트해야하는 대규모 목록이있는 경우 캐시되기에 적합하지 않을 수 있습니다. –

+0

이 시나리오를 효율적으로 처리 할 생각이 있습니까? – Freshblood

관련 문제