我在ASP中使用MemoryCache库。NET Core项目创建缓存,请参考Microsoft文档(https://learn.microsoft.com/en-us/aspnet/core/performance/caching/memory?view=aspnetcore-6.0)。问题是,当缓存已满,我试图在缓存中添加一个新元素(使用Set()函数),它从缓存中删除一个元素,不添加新的。也不清楚库删除缓存中存在的元素的基础是什么,它似乎是随机的,而不是基于元素的生命周期。我还尝试将缓存中的所有元素设置为相同的优先级(CacheItemPriority.Normal)。我该如何解决这个问题?
var calendarCacheEntryOptions = new MemoryCacheEntryOptions()
.SetSlidingExpiration(TimeSpan.FromSeconds(120))
.SetAbsoluteExpiration(DateTime.Now.AddSeconds(3600))
.SetPriority(CacheItemPriority.Normal)
.SetSize(1);
_calendarCache.Set(id, hashCode, calendarCacheEntryOptions);
在同一链接中,它随后继续描述:过期不会在后台发生。没有计时器主动扫描缓存中的过期项。缓存上的任何活动(Get、Set、Remove)都可以触发对过期项的后台扫描。您可能需要重新评估大小(或者如果您需要大小调整),或者绝对过期值。