gpt4 book ai didi

c# - 结合滑动和绝对过期

转载 作者:IT王子 更新时间:2023-10-29 04:44:15 26 4
gpt4 key购买 nike

我想使用 System.Runtime.Caching.MemoryCache 来缓存我的一些对象。我想确保该对象每天刷新一次(绝对过期),但如果它在最后一个小时内未被使用(滑动过期),我也想让它过期。我尝试这样做:

object item = "someitem";
var cache = MemoryCache.Default;
var policy = new CacheItemPolicy();
policy.AbsoluteExpiration = DateTime.Now.AddDays(1);
policy.SlidingExpiration = TimeSpan.FromHours(1);
cache.Add("somekey", item, policy);

但是我得到一个错误:

"ArgumentException" with "AbsoluteExpiration must beDateTimeOffset.MaxValue or SlidingExpiration must be TimeSpan.Zero."

最佳答案

您可以使用 CacheEntryChangeMonitor 实现这两种方案的缓存过期。插入一个没有绝对过期信息的缓存项,然后用这个项创建一个空的 monitorChange 并将它与第二个缓存项链接,您将在其中实际保存一个 slidingTimeOut 信息。

        object data = new object();
string key = "UniqueIDOfDataObject";
//Insert empty cache item with absolute timeout
string[] absKey = { "Absolute" + key };
MemoryCache.Default.Add("Absolute" + key, new object(), DateTimeOffset.Now.AddMinutes(10));

//Create a CacheEntryChangeMonitor link to absolute timeout cache item
CacheEntryChangeMonitor monitor = MemoryCache.Default.CreateCacheEntryChangeMonitor(absKey);

//Insert data cache item with sliding timeout using changeMonitors
CacheItemPolicy itemPolicy = new CacheItemPolicy();
itemPolicy.ChangeMonitors.Add(monitor);
itemPolicy.SlidingExpiration = new TimeSpan(0, 60, 0);
MemoryCache.Default.Add(key, data, itemPolicy, null);

关于c# - 结合滑动和绝对过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16524609/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com