【问题标题】:How do the caching 'Priority' and 'AbsoluteExpiration' work together?缓存“Priority”和“AbsoluteExpiration”如何协同工作?
【发布时间】: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 优先级 仅当缓存实现提供驱逐方式时才缓存条目 缓存中的条目并管理缓存条目的数量"

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

【问题讨论】:

  • 由于文档不清楚,我自己也想知道这一点。在我的情况下,我希望缓存条目不会被删除,除非它过期以防止缓存在它到期之前在重负载下清理它。

标签: c# caching


【解决方案1】:

因此,根据this,“NotRemovable”可以防止缓存条目被自动删除(例如当缓存空间不足时),但在过期或您手动将其从缓存中取出时会被删除。

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

【讨论】:

  • 您的答案是指System.Web.Caching.CacheItemPriority,而不是问题中提出的System.Runtime.Caching.CacheItemPriority。请编辑或删除您的答案 - 这是非常具有误导性的。 (当我找到你的答案时,我正在查看 MSDN,这是我注意到的唯一原因)。
猜你喜欢
  • 2021-06-23
  • 2021-12-09
  • 2019-04-21
  • 2014-08-05
  • 2020-01-14
  • 2012-12-21
  • 2013-01-19
  • 2018-07-08
  • 2012-11-30
相关资源
最近更新 更多