2012-11-30 65 views
29

如果我使用的ObjectCache并添加一个项目,像这样:.NET缓存如何使用Sliding Expiration?

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

我明白对象将在1天后到期。但是,如果该对象被访问的1/2,一天后使用:

object mystuff = cache["mykey"]; 

这是否复位定时器所以它现在1天,因为用钥匙“的myKey”条目的最后一次访问,或它仍然1 /一天到期吗?

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

谢谢。

回答

62

有两种类型的高速缓存策略,你可以使用:

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); 
} 

您更改时间跨度为您要适当的缓存时间。

+2

完美解答!谢谢你,先生。 – Kelly

-3

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

+0

问题是关于内存缓存不是饼干 – nsimeonov