我正在使用内存缓存来防止重新处理从队列中收到的消息。
以下是我创建缓存和添加项目的方式:
_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/