【问题标题】:.NET Caching how does Sliding Expiration work?.NET 缓存滑动过期如何工作?
【发布时间】:2012-11-18 05:44:33
【问题描述】:

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

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

谢谢。

【问题讨论】:

    标签: c# .net caching


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 问题是关于内存缓存而不是 cookie
      猜你喜欢
      • 1970-01-01
      • 2012-09-20
      • 2016-05-02
      • 2017-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-10
      • 1970-01-01
      相关资源
      最近更新 更多