【问题标题】:increase expiration time of item in Cache增加缓存中项目的过期时间
【发布时间】:2013-03-26 05:01:10
【问题描述】:

我有将项目添加到缓存的代码:

public static void AddTask(string name, string value,int seconds)
{
   _onCacheRemove = new CacheItemRemovedCallback(CacheItemRemoved);
   HttpRuntime.Cache.Insert(name, value, null,
                        DateTime.Now.AddSeconds(seconds), Cache.NoSlidingExpiration,
                        CacheItemPriority.NotRemovable, _onCacheRemove);
}

例如,seconds 等于 120。20 秒后,我想再次将过期时间设置为 120 秒。我该怎么做?

附言。 A 无法删除此项目并重新添加。

【问题讨论】:

    标签: asp.net asp.net-mvc caching


    【解决方案1】:

    当您将项目添加到缓存时 - 您可以提供一个回调,当运行时将要从缓存中删除项目时调用该回调 - 而不是在它已经被删除时调用的当前回调。

    在该回调中,您可以取消删除过程并延长条目的生命周期。

    请参阅 this overload of insert 和有关 CacheItemUpdateCallback delegate 的文档

    虽然您已经在处理已删除的事件 - 这个“更新”事件基本上是同一件事 - 它只是让您能够在需要时取消过期。

    【讨论】:

    • 我需要在调用回调之前增加。
    • 我不明白您为什么应该 - 在您的 CacheItemUpdateCallback 委托中,您要么延长缓存中对象的生命周期,要么允许它过期,使用该事件作为当前 CacheItemRemoveCallback 的替代品处理程序