2011-09-18 4 views
7

일부 참조 데이터에서 일부 드롭 다운 상자를 작성해야합니다. 예 : 도시 목록, 국가 목록 등 다양한 웹 양식을 작성해야합니다. 내 생각에, 우리는 우리의 애플리케이션에이 데이터를 캐쉬해야한다. 그래서 우리는 모든 형태의 데이터베이스를 공격하지 않는다. 나는 캐싱과 ASP.Net이 처음이다. 이 작업을 수행하는 방법을 제안하십시오.ASP.Net의 데이터 캐싱

답변

13

나는 항상 Cache 객체에 쉽게 접근 할 수있는 모든 프로젝트에 다음 클래스를 추가한다. 이를 실행하는 것은 하산 칸의 대답에 이어 좋은 방법이 될 것입니다.

public static class CacheHelper 
    { 
     /// <summary> 
     /// Insert value into the cache using 
     /// appropriate name/value pairs 
     /// </summary> 
     /// <typeparam name="T">Type of cached item</typeparam> 
     /// <param name="o">Item to be cached</param> 
     /// <param name="key">Name of item</param> 
     public static void Add<T>(T o, string key, double Timeout) 
     { 
      HttpContext.Current.Cache.Insert(
       key, 
       o, 
       null, 
       DateTime.Now.AddMinutes(Timeout), 
       System.Web.Caching.Cache.NoSlidingExpiration); 
     } 

     /// <summary> 
     /// Remove item from cache 
     /// </summary> 
     /// <param name="key">Name of cached item</param> 
     public static void Clear(string key) 
     { 
      HttpContext.Current.Cache.Remove(key); 
     } 

     /// <summary> 
     /// Check for item in cache 
     /// </summary> 
     /// <param name="key">Name of cached item</param> 
     /// <returns></returns> 
     public static bool Exists(string key) 
     { 
      return HttpContext.Current.Cache[key] != null; 
     } 

     /// <summary> 
     /// Retrieve cached item 
     /// </summary> 
     /// <typeparam name="T">Type of cached item</typeparam> 
     /// <param name="key">Name of cached item</param> 
     /// <param name="value">Cached value. Default(T) if item doesn't exist.</param> 
     /// <returns>Cached item as type</returns> 
     public static bool Get<T>(string key, out T value) 
     { 
      try 
      { 
       if (!Exists(key)) 
       { 
        value = default(T); 
        return false; 
       } 

       value = (T)HttpContext.Current.Cache[key]; 
      } 
      catch 
      { 
       value = default(T); 
       return false; 
      } 

      return true; 
     } 
    } 
+0

좋은 코딩 ... upvoted –

2

당신의 다른 질문에서 나는 dal, business 및 presentation 레이어가있는 3 레이어 아키텍처를 사용하고 있다고 읽었습니다.

그래서 데이터 액세스 클래스가 있다고 가정합니다. 이상적인 일은 동일한 클래스의 캐시 된 구현을 가지고 캐싱을 수행하는 것입니다.

예 : 사용자 인터페이스가 IUserRepository 인 경우 UserRepository 클래스가이를 구현하고 메소드를 통해 db에 항목을 추가/삭제/업데이트하면 UserRepository 객체의 인스턴스를 포함하는 CachedUserRepository를 가질 수 있으며 메소드를 처음 보게됩니다 일부 키 (메소드 매개 변수에서 파생)에 대해 캐시에 저장하고 항목이 발견되면 내부 객체에 대한 메소드를 호출합니다. 데이터를 얻는다; 캐시에 추가 한 다음 반환하십시오.

귀하의 CachedUserRepository도 분명히 캐시 개체의 인스턴스를 갖게됩니다. 캐시 개체 사용 방법에 대한 자세한 내용은 http://msdn.microsoft.com/en-us/library/18c1wd61(v=vs.85).aspx을 참조하십시오.

+1

... 일반 문화권/어휘에만 해당하는 것을 "장식 자"패턴이라고합니다. 즉, 캐싱을 구현하는 추가 기능을 사용하여 초기 저장소를 "장식"합니다. – tsimbalar