我目前尝试将项目插入 MemoryCache.Default 实例,该实例有效。但物品不会过期!轮询间隔默认设置为 2 分钟,没有对 MemoryCache 进行特定设置。
添加项目例程是这样的:
string key = "someKey";
var faultyItem = GetFaultyItemToBlockFromProcessingTheNextThreeMinutes();
if (!MemoryCache.Default.Contains(key))
{
MemoryCache.Default.Add(
new CacheItem(key, faultyItem),
new CacheItemPolicy()
{
AbsoluteExpiration = DateTimeOffset.UtcNow.AddMinutes(3)
});
}
但是,这些项目在缓存中永不过期!我等了 10 多分钟,它们还在缓存中。主要目的是通过尝试每隔几秒钟处理一次查询来防止它们用查询淹没数据库。它们每隔几秒钟检查一次,但没有 SlidingExpiration。大约 3 分钟、5 分钟后应再次检查它们,因为最大延迟仍然是可以容忍的。
我不想在 XML 等代码之外进行任何配置。如果不可能,是否有一个很好的替代 MemoryCache 的方法?也许通过参数和属性使用数字/对象键和配置?