2011-06-30 27 views
6

tôi có mã sau để cache một số mã đắt tiền.trong bao lâu, theo mặc định, mọi thứ có trong httpcache nếu tôi không đặt hết hạn rõ ràng không?

private MyViewModel GetVM(Params myParams) 
    { 
     string cacheKey = myParams.runDate.ToString(); 
     var cacheResults = HttpContext.Cache[cacheKey] as MyViewModel ; 
     if (cacheResults == null) 
     { 
      cacheResults = RunExpensiveCodeToGenerateVM(myParams); 
      HttpContext.Cache[cacheKey] = cacheResults; 
     }     
    return cacheResults; 
    } 

điều này sẽ ở lại trong bộ nhớ cache mãi mãi? cho đến khi máy chủ khởi động lại hoặc hết bộ nhớ?

Trả lời

5

điều này sẽ ở lại trong bộ nhớ cache mãi mãi?

Điều này sẽ tùy thuộc vào nhà cung cấp bộ nhớ cache cụ thể mà bạn đang sử dụng. Ví dụ: nếu bạn đang sử dụng bộ đệm ẩn trong bộ nhớ mặc định, nó có thể hết hạn nếu máy chủ bắt đầu chạy thấp trên bộ nhớ hoặc nếu nhóm ứng dụng được tái chế. Nhưng nếu bạn đang sử dụng một số nhà cung cấp bộ nhớ cache khác, ví dụ như bộ nhớ cache được phân phối như memcached hoặc AppFactory điều này sẽ phụ thuộc vào việc triển khai cụ thể.

Quy tắc chung là không bao giờ giả định rằng có gì đó nằm trong bộ nhớ cache vì trước đó bạn đã lưu trữ nó. Luôn kiểm tra sự hiện diện của mục trong bộ nhớ cache trước và nếu hiện tại không tìm nạp nó và lưu trữ trong bộ nhớ cache một lần nữa.

Các vấn đề liên quan