57

如果我使用 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 天,直到到期?

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

谢谢。

4

2 回答 2

113

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

CacheItemPolicy.AbsoluteExpiration将在设定的时间后使条目过期。

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

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

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 更改为所需的适当缓存时间。

于 2012-11-30T02:02:02.723 回答
-10

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

于 2016-06-01T12:35:22.773 回答