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

标签 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"];

这是否会重置计时器,使其自上次使用 key “mykey”访问条目后现在已经过了 1 天,或者它仍然是每天 1/2 直到到期?

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

谢谢。

最佳答案

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

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

关于c# - .NET 缓存滑动过期如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13637856/

相关文章:

python - 使用 Python 和 Redis 进行优雅的缓存

java - Spring和Ehache : Cachemanger

c# - 当项目开源时,谁应该拥有用于签署 .NET 程序集的私钥?

c# - 斜坡上的碰撞检查

c# - 如何将此 javascript 行转换为 c#?

c# - Windows 应用程序设置 - 更新和数据库架构更改

C# 从一个列表中减去另一个列表或检查一个列表是否完全包含在另一个列表中

c# - CSharpCodeProvider 'cannot find metadata file' 使用 Mono 编译插件代码

php - debug == 0 时如何手动刷新模型缓存?

C# 在一个字符串查询中插入并选择