.NET缓存Sliding Expiration如何工作?

Kel*_*lly 44 .net c# caching

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

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

我知道该对象将在1天后过期.但如果在一天后使用以下方式访问对象:

object mystuff = cache["mykey"];
Run Code Online (Sandbox Code Playgroud)

这是否会重置计时器,因此现在距离上次使用密钥"mykey"访问时间为1天,或者它仍然是1/2,直到到期为止?

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

谢谢.

mfa*_*nto 85

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

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);
}
Run Code Online (Sandbox Code Playgroud)

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