MemoryCache-防止项目过期

Woj*_*tek 4 .net c# caching polling memorycache

在我的应用程序中,我使用MemoryCache,但是我不希望项目过期。因此项目被插入到与默认策略缓存,没有AbsoulteExpiration或者SlidingExpiration被设置。

最近,在最后一台高服务器上,我遇到了缓存问题,因为它返回空值代替期望值,并在之前插入到缓存中。事实证明,不仅合格的项目(如明确设置了到期日期的项目)都从缓存中删除。在内存压力下,超过CacheMemoryLimit和/或值时PhysicalMemoryLimit,MemoryCache也会删除其他元素。

如何预防呢?如何确保将元素设置为一次缓存后,可以再次从中安全地获取它?

我考虑过将设置PollingInterval为某个巨大的值,但这只会延迟潜在的问题(并且轮询间隔在文档中被称为最大时间,而不是确切时间或最小时间)。设置PhysicalMemoryLimitPercentage为100%并不能解决问题,因为它引用的是物理安装的内存,而不是整个可用虚拟内存。还是我错了,这确实会有所帮助吗?

Eri*_*c B 5

CacheItemPolicy具有Priority可以设置为的属性NotRemovable

不过,您确实需要知道使用此设置向缓存添加了多少数据。不断地将数据添加到缓存中并且永不删除它最终会导致内存或溢出问题。

缓存通常用于缓存中不再存在某个项目的地方,在这种情况下,将从持久性存储(例如数据库或文件)中再次检索值。

在您的情况下,听起来您的代码要求该项目存在,这可能建议您寻找另一种方法(例如,注释中提到的静态ConcurrentDictionary)。