HttpContext.Cache过期

时间:2009-06-11 21:12:30

标签: asp.net caching

有没有办法在HttpContext.Cache中指定数据的保存时间?

3 个答案:

答案 0 :(得分:33)

您可以在Cache.Add()的第4个参数中指定它:

public Object Add(
    string key,
    Object value,
    CacheDependency dependencies,
    DateTime absoluteExpiration,  // After this DateTime, it will be removed from the cache
    TimeSpan slidingExpiration,
    CacheItemPriority priority,
    CacheItemRemovedCallback onRemoveCallback
)

编辑:

如果通过索引器(即Cache["Key"])访问缓存,则调用的方法不会使用到期,并且会无限期地保留在缓存中。

以下是使用索引器时调用的代码:

public void Insert(string key, object value)
{
    this._cacheInternal.DoInsert(true, key, value, null, NoAbsoluteExpiration, NoSlidingExpiration, CacheItemPriority.Normal, null, true);
}

答案 1 :(得分:16)

使用Cache.Add方法,例如: -

 HttpContext.Cache.Add("mykey", someObj, null, Cache.NoAbsoluteExpiration, new TimeSpan(0, 15, 0), CacheItemPriority.Normal, null);

以上内容在最后一次访问后的15分钟后到期。或者,您可以将Cache.NoSlidingExpiration传递给此参数,并在上一个参数中使用特定的DateTime。

答案 2 :(得分:4)

是的,有一种方法可以指定在Cache中保存数据的时间长度,但前两个示例中没有一个能够保证您将物品保留在2个基于时间的任何一个时间内的预期时间内Add方法的参数(绝对或滑动到期)。

缓存只是一个缓存,其目的是加快速度。因此,您不应该期望它能够保留您的数据,并且如果不存在则始终准备好获取它。

正如您可能知道的那样,您可以拥有项目的依赖项,即使时间尚未到期,它们也会基于此过期。这是一个简单的概念,但另一个并不那么容易。优先事项。

根据您的项目的优先级并加上内存压力,您可以发现自己处于根据计算缓存数据的情况,但是您没有更多地使用该数据在这种情况下,让缓存只是一个开销。

编辑:好吧,我忘了指定实际保存项目所需时间的方法,这是选择所需的基于时间的过期,完全不依赖,不手动删除它的产物,并使用NotRemovable优先级。这也是inproc会话状态在内部保存在httpruntime缓存中的方式。