.NET缓存Sliding Expiration如何工作?

时间:2012-11-30 01:51:07

标签: c# .net caching

如果我使用ObjectCache并添加如下项目:

ObjectCache cache = MemoryCache.Default;
string o = "mydata";
cache.Add("mykey", o, DateTime.Now.AddDays(1));

我知道该对象将在1天后过期。但是如果在一天之后使用以下方式访问对象:

object mystuff = cache["mykey"];

这是否会重置计时器,因此现在距离上次使用密钥“mykey”访问时间为1天,或者它仍然是每天1/2,直到到期为止?

如果答案是否定的,并且有办法做到这一点,我很想知道。

感谢。

2 个答案:

答案 0 :(得分:81)

您可以使用两种类型的缓存策略:

CacheItemPolicy.AbsoluteExpiration将在一段时间后过期。

如果在一段时间内未访问该条目,

CacheItemPolicy.SlidingExpiration将使该条目到期。

您使用的ObjectCache Add()重载将其视为绝对过期,这意味着它将在1天后过期,无论您访问它多少次。您需要使用其中一个overloads。这是你设置滑动过期的方式(它有点复杂):

CacheItem item = cache.GetCacheItem("item");

if (item == null) {

    CacheItemPolicy policy = new CacheItemPolicy {
        SlidingExpiration = TimeSpan.FromDays(1)
    }

    item = new CacheItem("item", someData);

    cache.Set(item, policy);
}

您可以将TimeSpan更改为所需的相应缓存时间。

答案 1 :(得分:-5)

使用配置元素的slidingExpiration属性设置SlidingExpiration属性值。 如果发出请求并且超过一半的超时间隔已经过去,则滑动到期将重置有效身份验证cookie的到期时间。如果cookie过期,则用户必须重新进行身份验证。将SlidingExpiration属性设置为false可以通过根据配置的超时值限制身份验证cookie的有效时间来提高应用程序的安全性。 我们建议,如果将requireSSL配置为false,则还要将slidingExpiration配置为false,以减少故障单有效的时间。