内存缓存逐出回调从未调用



.Net Core Memory cache.我希望在从缓存中删除项目时收到通知。实现此示例后: https://learn.microsoft.com/en-us/aspnet/core/performance/caching/memory?view=aspnetcore-3.1

=> CreateCallbackEntry((。当我在其中放置断点时

逐出回调:

private static void EvictionCallback(object key, object value,
EvictionReason reason, object state)
{
var message = $"Entry was evicted. Reason: {reason}.";
// i should reach this after 10 seconds
}

仅当尝试再次读取刚刚存储在缓存中的同一键时,才会命中断点。否则,即使网页保持打开状态,也永远不会调用该逐出方法。

控制器:

public void OnGet()
{
_cache.GetOrCreate("key", item);
// eviction callback does not fire until I query for the same key again below
var t = _cache.GetOrCreate("key", item)
}

缓存:

var cacheEntryOptions = new MemoryCacheEntryOptions()
.SetAbsoluteExpiration(TimeSpan.FromSeconds(10))
.RegisterPostEvictionCallback(callback: EvictionCallback, state: this);
cacheEntry = await createItem();
_cache.Set(key, cacheEntry, cacheEntryOptions);

PostEvicionCallback不是过期事件。

当从 缓存,而不是过期。

过期条目的删除在过期后延迟完成 对缓存的操作。这就是为什么在下一次执行回调的原因 过期后的请求。出于性能考虑,我们删除了 批量过期商品,其最短期限由 MemoryCacheOptions.ExexpationScanFrequency.

我们目前没有公开任何机制来准确通知缓存时间 条目过期,但过期的条目最终将触发 在任何缓存操作之后的某个时间到期回调。

从 github.com/aspnet/Caching

您可以尝试降低 MemoryCacheOptions.ExexpationScanFrequency,但要注意性能影响。默认值为 1 分钟。

最新更新