有没有办法在HttpContext.Cache中指定数据的保存时间?
答案 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缓存中的方式。