我对MemoryCache
有一个抽象,这个实例使用AbsoluteExpiration
作为CacheItemPolicy
,并由Autofac管理,如下所示:
builder
.RegisterType<MyCache>()
.As<IMyCache>()
.SingleInstance()
.WithParameter("cacheName", "MyCache");
理论上我希望这些物品绝对过期(例如在15分钟内)。
问题(问题)是,它是一个超过所有请求的单个实例,并且没有适当的机制可以将到期时间再次重置为15分钟。 所以刷新只会发生一次,对吧?
这是什么解决方案?我是否需要挂钩事件或什么......?
答案 0 :(得分:1)
缓存项目策略适用于每个项目。添加一个项目,它会在15分钟后过期(根据您的项目政策)。没有“重置”或任何需要的东西。它不像计时器或信号量那样工作 - 添加东西,缓存处理其余部分。
您可以通过使政策足够短(一分钟?)来添加内容并等待来测试这一点。
答案 1 :(得分:0)
我的问题是我需要指定缓存密钥到期的某个时间点:
AbsoluteExpiration = DateTimeOffset.UtcNow.AddMinutes(15)
缓存策略是在private readonly field
中设置的,只有在创建MyCache
实例时才会初始化,但这只发生在应用程序启动时(IoC容器,单个实例)。
现在这对我有用:
private CacheItemPolicy CachePolicy => new CacheItemPolicy
{
AbsoluteExpiration = DateTimeOffset.UtcNow.AddMinutes(15)
};
每次访问缓存项策略时,都会计算新的DateTimeOffset
。