【问题标题】:How to check when an item in MemoryCache will expire?如何检查 MemoryCache 中的项目何时过期?
【发布时间】:2016-02-15 02:29:19
【问题描述】:

是否可以读取MemoryCache中某项的过期时间?

我正在使用 .NET System.Runtime.Caching.MemoryCache 将我的配置信息存储 30 分钟,然后再从数据库中重新加载它。作为状态页面的一部分,我想显示特定缓存项的使用年限或过期时间。

object config = LoadSomeStuffFromDatabase();
CacheItemPolicy cachePolicy = new CacheItemPolicy() { AbsoluteExpiration = DateTime.Now.AddMinutes(30) }; 
Cache.Add("MyConfigKey", config, cachePolicy);

// And now I want to do something like this :-)
DateTime dt = Cache.SomeMagicMethod("MyConfigKey");

今天我使用了一个每次重新加载配置时都会更新的变量。但是从缓存本身读取这些信息会更好。

【问题讨论】:

  • 另一种方法是将您的插入日期与您的对象一起缓存,这样,当您稍后获取它时,您将知道 何时您确实保存了它,并且您可以计算到期需要多长时间

标签: c# caching memorycache


【解决方案1】:

我相信这已经得到了回答:

How to get expiry date for cached item?

如果这不是您想要的,请考虑以下事项:

API 不支持从缓存项的检索中取回策略。由于您可以缓存任何对象,因此您可以将策略与对象一起缓存,并在以后需要访问该对象时进行一些基于时间的比较。

【讨论】:

  • 链接的答案与 SlidingExpiration 有关。但是你和@Matias-Cicero 的设计建议比单独维护要好。我已经有了基础对象,所以它非常符合我的要求。
  • 在我看来这是一个非常糟糕的 API。将策略缓存为一级条目而不是针对缓存项的元数据是非常糟糕的形式。
猜你喜欢
  • 1970-01-01
  • 2018-05-10
  • 2014-04-06
  • 2012-11-21
  • 1970-01-01
  • 1970-01-01
  • 2013-06-03
  • 2011-10-16
  • 2019-08-13
相关资源
最近更新 更多