如果我使用 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/