如何缓存'Priority'和& # 39;AbsoluteExpiration& # 39;一起工作

本文关键字:何缓存 AbsoluteExpiration 一起 工作 缓存 Priority | 更新日期: 2023-09-27 18:12:33

我发现自己进入了一个没有正确清理的CacheItem。在查看MSDN并纠正自己使用基于utc的计算时,我发现了这个令人困惑的信息:

  • CacheItemPolicy。优先级
  • CacheItemPolicy。AbsoluteExpiration

AbsolutExpiration用于设置CacheItem的"保持存活",Priority.NotRemovable用于强制CacheItem永久存在。没有通知哪个属性覆盖了另一个。

下面的代码可以编译,SQL Profiler也确认数据库只查询一次,而其他请求都来自缓存。

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

我假设这段代码强制缓存项永远保留,但在创建后12小时后被清除,与MSDN关于设置的说明一致。

"缓存实现应该为a设置NotRemovable优先级只有当缓存实现提供了驱逐的方法时,才会进入缓存从缓存中获取条目,并管理缓存条目的数量"

那么另一方面,为什么两个属性会一起工作呢?实现是否带来了某种"更不可移动"?

如何缓存'Priority'和& # 39;AbsoluteExpiration& # 39;一起工作

所以根据这个"NotRemovable"防止缓存条目被自动删除(比如当缓存空间用完时),但是当它过期或您手动将它从缓存中取出时将被删除。

NotRemovable这个优先级的缓存项不会在服务器释放系统内存时自动从缓存中删除。但是,具有此优先级级别的项将根据项的绝对过期时间或滑动过期时间与其他项一起被删除。