缓存'Priority'和'AbsoluteExpiration'如何协同工作?

Ind*_*ent 9 c# caching

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

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

下面的代码进行编译,SQL Profiler也确认只查询一次数据库,而其他每个请求都来自缓存.

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

我假设此代码强制缓存项目永久保留,但在创建12小时后清除,与MSDN关于该设置的注释一致.

"只有当缓存实现提供了从缓存中逐出条目并管理缓存条目数量的方法时,缓存实现才应为缓存条目设置NotRemovable优先级"

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

Fab*_*ier 8

因此,根据 "NotRemovable"可以防止自动删除缓存条目(例如缓存空间不足时),但是当缓存条目到期或者手动将其从缓存中移除时将被删除.

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