【问题标题】:Expiring a cached item via CacheItemPolicy in .NET MemoryCache通过 .NET MemoryCache 中的 CacheItemPolicy 使缓存项过期
【发布时间】:2013-06-03 02:01:17
【问题描述】:

我对 CacheItemPolicy 上的 AbsoluteExpiration 属性感到困惑。

The MSDN documentation for it 表示“缓存条目被驱逐之前必须经过的时间段。”它使用 System.DateTimeOffset 来定义“时间段”。

但是,如果您查看 DateTimeOffset's MSDN documentation,它会说它“代表一个时间点……相对于协调世界时 (UTC)。”也参考这个StackOverflow thread

你看到问题了吗? AbsoluteExpiration 需要一个“时间段”(如 5 秒或 2 小时),但它需要一个表示“时间点”的对象(如 2012 年 12 月 21 日,美国东部标准时间 06:14:00)。

在下面的代码中,我为所有项目定义了一个策略。我希望每个项目在添加后都过期cacheExpiryInSeconds 秒。有人可以验证我这样做的方式是否正确吗?

public class MyCache : IRoutingInfoCache
{
    MemoryCache _routingInfoCache;
    CacheItemPolicy _cachePolicy;


    public MyCache(int cacheExpiryInSeconds)
    {
        _routingInfoCache = new MemoryCache("myCache");
        _cachePolicy = new CacheItemPolicy() {
            AbsoluteExpiration = 
                new DateTimeOffset(
                    DateTime.UtcNow.AddSeconds(cacheExpiryInSeconds))
        };
    }


    public void Put(string key, object cacheItem)
    {
        // based on how I constructed _cachePolicy, will this item expire
        // in cacheExpiryInSeconds seconds?
        _routingInfoCache.Add(new CacheItem(key, cacheItem), _cachePolicy);
    }
}

【问题讨论】:

    标签: c# .net caching


    【解决方案1】:

    缓存遵循 UTC 时间以提供统一的时间计算,因此您指定缓存条目应过期的时间点(以 UTC 为单位),缓存将计算与现在的适当差异并按预期过期。

    您的代码将无法按预期工作,因为您的绝对到期时间将是一旦cacheExpiryInSeconds 秒后进入您的缓存项,从而导致立即 驱逐。当 AbsoluteExpiration 在不久的将来设置时,您无法共享 CacheItemPolicy 实例,我知道这很烦人。 :)

    【讨论】:

    • 但是,如果我创建一个缓存策略(使用上面的代码)/每次/我添加一个项目,它应该会按预期工作,对吧?
    • 是的,没错!或者,如果您更灵活一点,请保留 CacheItemPolicy 的共享实例并使用 N 秒的 SlidingExpiration。
    • 我明确不想在每次访问项目时“重置时钟”,所以我认为 AbsoluteExpiration 适合我。不过,谢谢你提到它。
    • 可能会让您感觉更好的一件事是 CacheItemPolicy 是一个结构,因此每次调用创建它非常便宜。
    • @DavidHaney “不久的将来”是什么意思?这可以解释我在这里看到的行为:stackoverflow.com/questions/23461749/self-renewing-memorycache 吗?
    猜你喜欢
    • 2011-10-16
    • 2019-08-13
    • 1970-01-01
    • 2012-09-20
    • 2018-05-10
    • 2014-04-06
    • 2017-11-13
    • 1970-01-01
    • 2014-05-21
    相关资源
    最近更新 更多