2011-10-28 19 views
8

Tôi tìm thấy chính mình vào một CacheItem không làm sạch chính xác. Trong khi nhìn vào MSDN và sửa chữa bản thân mình vào sử dụng tính UTC-dựa, tôi thấy thông tin khó hiểu này:Làm cách nào để bộ nhớ đệm 'Ưu tiên' và 'AbsoluteExpiration' hoạt động cùng nhau?

AbsolutExpiration được sử dụng để thiết lập một "sống giữ-" của một CacheItem, Priority.NotRemovable được sử dụng để buộc CacheItem tồn tại mãi mãi. Không có thông báo về thuộc tính nào ghi đè quyền sở hữu khác.

Mã bên dưới làm biên dịch và SQL Profiler cũng xác nhận rằng cơ sở dữ liệu chỉ được truy vấn một lần, trong khi mọi yêu cầu khác đến từ bộ nhớ cache.

CacheItemPolicy _cachePolicy = new CacheItemPolicy() 
{ 
    AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddHours(6)), 
    Priority = CacheItemPriority.NotRemovable 
}; 

Tôi giả sử mã này buộc các mục trong bộ nhớ cache ở lại mãi mãi nhưng bị xóa sau 12 giờ kể từ khi tạo, phù hợp với ghi chú của MSDN về cài đặt.

"triển khai cache nên thiết lập các ưu tiên NotRemovable cho một mục bộ nhớ cache chỉ khi thực hiện bộ nhớ cache cung cấp nhiều cách để đuổi mục từ bộ nhớ cache và để quản lý số lượng các mục bộ nhớ cache"

Sau đó, phía bên kia, tại sao cả hai tài sản lại làm việc cùng nhau? Việc triển khai có mang lại một số loại "không thể tháo rời" hơn không?

+0

Tôi tự hỏi điều này nhờ tài liệu không rõ ràng. Trong trường hợp của tôi, tôi muốn các mục lưu trữ không được loại bỏ trừ khi nó hết hạn để ngăn chặn bộ nhớ cache làm sạch nó lên dưới tải nặng trước khi nó hết hạn. –

Trả lời

5

Vì vậy, theo this "Không thể xóa" ngăn tự động xóa mục nhập bộ nhớ cache (như khi bộ nhớ cache hết dung lượng) nhưng sẽ bị xóa khi hết hạn hoặc bạn lấy nó ra khỏi bộ nhớ cache theo cách thủ công.

NotRemovable Các mục bộ nhớ cache với mức ưu tiên này sẽ không được tự động xóa khỏi bộ nhớ cache như máy chủ giải phóng bộ nhớ hệ thống. Tuy nhiên, các mục có mức độ ưu tiên này sẽ bị xóa cùng với các mục khác theo thời gian hết hạn tuyệt đối hoặc trượt của mục.

+0

Câu trả lời của bạn đề cập đến 'System.Web.Caching.CacheItemPriority', không phải' System.Runtime.Caching.CacheItemPriority' được hỏi trong câu hỏi. Vui lòng chỉnh sửa hoặc xóa câu trả lời của bạn - điều này rất gây hiểu lầm. (Tôi đã nhìn vào MSDN khi tôi tìm thấy câu trả lời của bạn, đó là lý do duy nhất tôi nhận thấy). – xxbbcc

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