标签: lazycache

LazyCache:定期刷新缓存的项目

我正在使用LazyCache ,并且希望每小时刷新一次缓存,但理想情况下,我希望缓存项过期后的第一个调用者不要等待缓存重新加载。我写了以下内容

\n\n
public async Task<List<KeyValuePair<string, string>>> GetCarriersAsync()\n{\n\n    var options = new MemoryCacheEntryOptions\n    {\n        AbsoluteExpirationRelativeToNow = new TimeSpan(1,0,0),// consider to config\n    }.RegisterPostEvictionCallback(\n         async  (key, value, reason, state) =>\n        {\n            await GetCarriersAsync();//will save to cache\n            _logger.LogInformation("Carriers are reloaded: " );\n        });\n    Func<Task<List<KeyValuePair<string, string>>>> cacheableAsyncFunc = () => GetCarriersFromApi();\n    var cachedCarriers = await _cache.GetOrAddAsync($"Carriers", cacheableAsyncFunc, options);\n\n    return cachedCarriers;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,当缓存项过期时,不会调用 RegisterPostEvictionCallback,而是仅在对该项的下一个请求发生时调用(并且调用者需要等待漫长的操作)。

\n\n

线程 Expiration 几乎永远不会在后台自行发生\xc2\xa0#248解释说这是设计使然,并建议解决方法来指定 CancellationTokenSource.CancelAfter(TimeSpan.FromHours(1)) 而不是 SetAbsoluteExpiration。

\n\n

不幸的是,LazyCache.GetOrAddAsync 没有\xe2\x80\x99t 有 CancellationToken 作为参数。\n在预定时间触发缓存重新加载且第一个用户的等待时间最短的最佳方法是什么?

\n

caching memorycache .net-core lazycache

5
推荐指数
1
解决办法
7904
查看次数

标签 统计

.net-core ×1

caching ×1

lazycache ×1

memorycache ×1