如果我使用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,直到到期为止?
如果答案是否定的,并且有办法做到这一点,我很想知道。
感谢。
答案 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,以减少故障单有效的时间。