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?
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. –