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