c# - 项目过期后无法将项目添加到内存缓存

标签 c# .net caching

我正在使用内存缓存来防止重新处理从队列中收到的消息。

以下是我创建缓存和添加项目的方式:

        _cache = new MemoryCache("TransactionProcessorCache");

        _policy = new CacheItemPolicy
        {
            UpdateCallback = null,
            AbsoluteExpiration = DateTimeOffset.UtcNow.AddMinutes(1)
        };

        _cache.Add("unique key", "value", _policy);

我将第一个项目添加到缓存中,我可以在预期的 1 分钟内检索该项目。

但是,一旦第一个项目过期并且缓存变空,我添加到缓存中的后续项目将无法检索。尽管从 _cache.Add(...) 调用中获得返回值“true”,缓存始终表现得好像它是空的。

我正在使用 .NET Framework 4.5.1。该应用程序是一个控制台应用程序。这里的MemoryCache来自System.Runtime.Caching

最佳答案

再看看这一行

AbsoluteExpiration = DateTimeOffset.UtcNow.AddMinutes(1)

您从当前时间起 1 分钟后永远禁用缓存。一分钟过后,您将不得不再次重新创建策略(或者每次要添加项目时都创建策略,然后它会按照您期望的方式运行)。

请参阅@JD.B 的回答以获得更好的常量策略。

关于c# - 项目过期后无法将项目添加到内存缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31855550/

相关文章:

c# - Entity Framework : How to put multiple stored procedures in a transaction?

c# - C# 中的轻量级类到 MySQL 记录映射?

caching - 浏览器何时自动清除外部 JavaScript 文件的缓存?

javascript - 如何将 JavaScript 和 CSS 文件放入浏览器缓存中?

c# - 使用 Entity Framework 更新 DBContext 类中的创建和修改日期字段

c# - WhenAll() 没有按预期工作

c# - 如何在具有不同计时器持续时间的.net核心的后台服务中运行多个任务

c# - 如何在保持打开状态的同时将 "this.ShowInTaskBar"更改为 "form.ShowDialog()"?

c# - 取消 Socket.xxxxAsync 调用

django - 如何在 django 中高效地服务海量站点地图