posted by 방랑군 2012. 1. 8. 00:38

출처 :  http://weblab.tistory.com/218 

웹페이지 전체 혹은 일부 페이지 내에 쓰이는 데이터의 캐싱은 가상화와 더불어 비싼 서버자원을 효율적으로 사용하기 위한 훌륭한 방법 중 하나입니다.

그래서 이번에 살펴보고 적용한 코드를 메모해두려고 합니다.

ASP.NET에서 캐싱은 크게 세 가지 방식으로 나눠집니다.
  1. 페이지 단위 캐싱
    - 페이지에 세션값에 따른 분기가 있다면 캐싱된 데이터가 그대로 뿌려지므로 동작하지 못합니다.
  2. 데이터 단위 캐싱
    - 고정적으로 출력할 데이터만 콜렉션에 관리하므로 세션값이나 기타 파라미터에 따라 페이지 내 동적인 요소를 관리할 수 있습니다.
  3. 컨트롤 단위 캐싱
    - 사용자가 작성한 컨트롤 단위로 캐싱을 선언할 수 있습니다.
먼저 페이지 단위 캐싱은 누가 접속하더라도 동일한 출력물을 표시할 때 유용합니다.

<%@ OutputCache Duration="60" VaryByParam="None" %>

요렇게 선언적으로 프로그래밍하시거나

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntilExpires(true);

요렇게 C# 코드로 작성하셔도 됩니다.

그리고 좀 더 자주 쓰지 않을까 싶은 데이터 단위 캐싱을 하려면 Context.Cache 객체에 의존해야 합니다.

//using System.Web.Caching

Cache cache = Context.Cache;
cache.Insert("Pls-Remember-Me", "캐시에 담을 객체 - 지금은 스트링", null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromHours(4));

이렇게 저장해두면 4시간 동안은 IIS가 데이터를 보관해둡니다.

(String)cache["Pls-Remember-Me"]

처럼 접근해서 데이터를 가져올 수 있습니다. 간편하죠? ^^a

사용자 정의 컨트롤의 경우 System.Web.UI.UserControl을 상속받았으면 [PartialCaching(120)]처럼 선언적 프로그래밍이 가능합니다만, 필요에 따라 골라 쓰시면 되겠습니다.