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