【发布时间】:2016-11-09 18:38:07
【问题描述】:
我发现自己进入了一个没有正确清理的CacheItem。在查看 MSDN 并纠正自己使用基于 Utc 的计算时,我发现了以下令人困惑的信息:
AbsolutExpiration 用于设置CacheItem 的“keep-alive”,Priority.NotRemovable 用于强制CacheItem 永远存在。没有关于哪个属性覆盖其他属性的通知。
下面的代码会编译,SQL Profiler 也确认数据库只被查询一次,而其他所有请求都来自缓存。
CacheItemPolicy _cachePolicy = new CacheItemPolicy()
{
AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddHours(6)),
Priority = CacheItemPriority.NotRemovable
};
我假设此代码强制缓存项永久保留,但在创建后 12 小时后被清除,这与 MSDN 关于设置的说明一致。
"缓存实现应该设置 NotRemovable 优先级 仅当缓存实现提供驱逐方式时才缓存条目 缓存中的条目并管理缓存条目的数量"
那么另一方面,为什么这两个属性会一起工作呢?实现是否带来某种“更不可移动”?
【问题讨论】:
-
由于文档不清楚,我自己也想知道这一点。在我的情况下,我希望缓存条目不会被删除,除非它过期以防止缓存在它到期之前在重负载下清理它。