LINQ2SQL 저장소를 사용하여 ASP.NET MVC에서 캐싱 전략을 구현하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/199138

문제

HTTPContext 캐싱 또는 엔터프라이즈 라이브러리 캐싱 애플리케이션 블록을 사용해야하는지 모르겠습니다. 또한 캐시 된 목록의 일부인 엔티티를 삭제하거나 업데이트 할 때 캐싱 전략에 가장 적합한 패턴은 무엇입니까?

캐시에서 모든 목록을 제거하거나 캐시 된 목록에서 항목 만 제거해야합니까? 업데이트하면 캐시에서 목록을 제거하거나 엔티티를 업데이트합니다.

도움이 되었습니까?

해결책

캐싱을 구현하는 데 몇 가지 접근 방식이 있으며 HTTPContext가 가장 쉬운 것입니다. 그러나 반드시 최악의 것은 아닙니다. 보세요 memcached 또는 MS 속도, 둘 다 ASP.NET 캐시의 백엔드로 사용할 수 있습니다. 특히 Memcached는 정말 좋은 일을한다는 명성을 가지고 있습니다.

캐싱 정책의 경우 : 귀하에게 가장 적합한 내용을 결정해야합니다. 저는 개인적으로 업데이트/삭제시 회사가 목록에 있는지 여부를 찾기보다는 업데이트/삭제시 전체 목록을 제거 할 것입니다. 시간이 많이 걸리면 동시성 문제를 고려해야합니다 (누군가가 다른 엔티티의 업데이트/삭제를 수행 할 수 있으므로 목록을 잠그십시오). 때로는 엔티티를 제자리에 업데이트하는 것이 합리적입니다 (필요한 모든 데이터가있는 완전한 객체가있는 경우) 때로는 시간 낭비입니다. 일부 상태 변경으로 인해 엔티티가 다른 곳으로 이동해야하기 때문입니다 (예 : 정렬 할 때) 최후의 변경 등)

플러시 된 목록을 새로 고치는 데 너무 많은 시간이 걸리지 않도록 DB 코드를 최적화하는 것을 잊지 마십시오.

다른 팁

둘 다 테스트를 수행 한 후 코드의 맥락에서 캐싱 애플리케이션 블록을 완전히 검토하고 내 경험을 블로그에 올렸습니다. 사용하기가 매우 간단하고 우리의 요구에 충분히 강력합니다. 나는 그것을 추천 할 것이다. 내 결과는 여기에 블로그를 작성했습니다.

귀하의 위치에서 저는 저장소 패턴을 사용하여 캐시를 유지 관리하고 데이터베이스 데이터 세트에 적합하며 캐시에 동일하게 작동해야합니다. 저장소 패턴에 명백하지 않은 경우 Steven Walther 에서이 게시물을 확인하십시오.. 그러나 이전 답변에 동의하지 않는 경향이 있습니다. 수정에 필요한 항목 만 제거하고 나머지를 손대지 않은 상태로 유지합니다. 이렇게하면 원하는 경우 전체 목록과 독립적으로 캐시에서 항목을 만료 할 수 있습니다.

캐시하려는 모든 동작 또는 컨트롤러에서 [outputCache (duration = 10, varybyparam = "none")]를 사용하십시오.

~에서 http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/improving-performance-with output-caching-cs

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top