2011-09-18 37 views
7

Tôi cần điền một số ô thả xuống từ một số dữ liệu tham chiếu. Ví dụ: Danh sách thành phố, Danh sách quốc gia, v.v. Tôi cần điền vào các biểu mẫu web khác nhau. Tôi nghĩ, chúng ta nên lưu trữ dữ liệu này trong ứng dụng của mình để chúng tôi không nhấn vào cơ sở dữ liệu trên mọi biểu mẫu. Tôi mới vào bộ nhớ đệm và ASP.Net. Hãy đề nghị tôi làm thế nào để làm điều này.Caching dữ liệu trong ASP.Net

Trả lời

13

Tôi luôn thêm lớp sau vào tất cả các dự án của mình, giúp tôi dễ dàng truy cập đối tượng Cache. Thực hiện điều này, theo câu trả lời của Hasan Khan sẽ là một cách tốt để đi.

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

Đẹp mã hóa ... được thăng hạng –

2

Từ câu hỏi khác của bạn, tôi đã đọc rằng bạn đang sử dụng kiến ​​trúc 3 lớp với dal, business và presentation layer.

Vì vậy, tôi giả định rằng bạn có một số lớp truy cập dữ liệu. Điều lý tưởng cần làm là để có một thực hiện được lưu trữ trong cùng một lớp và lưu vào bộ nhớ đệm trong đó.

Ví dụ: Nếu bạn có một IUserRepository giao diện thì lớp UserRepository sẽ triển khai nó và thêm/xóa/cập nhật các mục trong db thông qua các phương thức, sau đó bạn cũng có thể có CachedUserRepository chứa đối tượng UserRepository và trên phương thức get vào cache đối với một số khóa (bắt nguồn từ các tham số phương thức) và nếu mục được tìm thấy thì nó sẽ trả về nó nếu không bạn gọi phương thức trên đối tượng bên trong; lấy dữ liệu; thêm vào bộ nhớ cache và sau đó trả lại.

CachedUserRepository của bạn cũng sẽ có trường hợp đối tượng bộ nhớ cache rõ ràng. Bạn có thể xem http://msdn.microsoft.com/en-us/library/18c1wd61(v=vs.85).aspx để biết chi tiết về cách sử dụng đối tượng Cache.

+1

... và chỉ cho văn hóa/từ vựng chung, điều này được gọi là mẫu trang trí "". Tức là, bạn "trang trí" kho lưu trữ ban đầu với chức năng bổ sung thực hiện bộ nhớ đệm. – tsimbalar