C# .NET缓存滑动过期如何工作?

C# .NET缓存滑动过期如何工作?,c#,.net,caching,C#,.net,Caching,如果我使用ObjectCache并添加如下项: ObjectCache cache = MemoryCache.Default; string o = "mydata"; cache.Add("mykey", o, DateTime.Now.AddDays(1)); 我知道该对象将在1天后过期。但是,如果在一天之后的1/2时间内通过以下方式访问对象: object mystuff = cache["mykey"]; 这是否会重置计时器,使其从最后一次使用“mykey”键访问条目到现在已经1天

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

ObjectCache cache = MemoryCache.Default;
string o = "mydata";
cache.Add("mykey", o, DateTime.Now.AddDays(1));
我知道该对象将在1天后过期。但是,如果在一天之后的1/2时间内通过以下方式访问对象:

object mystuff = cache["mykey"];
这是否会重置计时器,使其从最后一次使用“mykey”键访问条目到现在已经1天了,或者直到到期仍然是1/2天

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


谢谢。

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

将在设定的时间后使条目过期

如果在设定的时间内未访问该条目,则该条目将过期

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


将TimeSpan更改为所需的适当缓存时间

使用配置元素的SlidingExpiration属性设置SlidingExpiration属性值。 如果发出请求且超时时间间隔超过一半,滑动过期将重置有效身份验证cookie的过期时间。如果cookie过期,用户必须重新验证。将SlidingExpiration属性设置为false可以根据配置的超时值限制身份验证cookie的有效时间,从而提高应用程序的安全性。
我们建议,如果将requireSSL配置为false,也可以将slidingExpiration配置为false,以减少票证的有效时间。

问题是关于内存缓存,而不是cookies
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);
}