【问题标题】:In-memory cache in ASP.NET Core emptied immediatelyASP.NET Core 中的内存缓存立即清空
【发布时间】:2017-10-20 06:00:27
【问题描述】:

我正在尝试为我的 ASP.NET Core 应用程序实现临时 IP 阻塞,而我读过的所有关于如何执行此操作的内容都使用缓存。

我按照这篇文章了解了 asp.net core 中的内存缓存: https://docs.microsoft.com/en-us/aspnet/core/performance/caching/memory

代码运行正常,但缓存在操作完成后立即清空。

如果在这一行设置断点:

_cache.Set(CacheKeys.Entry, cacheEntry, cacheEntryOptions);

我可以看到 _cache 确实具有正确的值。但是,下次我重新加载页面时,该值就消失了。不管我将过期时间设置为多长,或者即使我设置了

CacheItemPriority.NeverRemove

在 cacheEntryOptions 中。

我还尝试为从缓存中逐出项目注册回调,以查看它是否由于内存压力而立即被逐出。但是,永远不会调用回调。

是否需要启用一些服务器选项才能允许缓存?

【问题讨论】:

  • 你在 DI 中为内存缓存使用了正确的范围吗?这听起来像是作用域或瞬态的。对于您的情况,您应该使用单例。否则,每次创建控制器时,您的数据都会丢失......或者,您是否处理缓存?您是否在代码周围使用using 语句?
  • @MichaC 他不需要范围 DI 因为 AddMemoryCache 有它内置
  • 我不知道如何确定范围或是否应该。我不是故意处置缓存,但它看起来确实在每次创建控制器时都会被破坏。我没有在代码周围使用 using 语句。我的代码和文章的完全一样。正如我正在尝试做的那样,我已经尝试安装对缓存进行临时 IP 阻塞的 nugget 包。据我所知,他们面临同样的问题。所以我猜这不是代码。我尝试了包 AspNetCoreRateLimit - 没有运气。
  • 我在 ASP.NET Core 2 中使用 MemoryCache 也遇到了这种情况。它与我的开发环境中的 IISExpress 相关吗?

标签: caching asp.net-core-mvc


【解决方案1】:

我今天遇到了类似的问题。并且发现缓存只保存了值的引用。因此,如果您将列表保存到缓存中并稍后清除列表。缓存的 List 也将被清除,但 key 仍然存在。 源码在这里:https://source.dot.net/#Microsoft.Extensions.Caching.Abstractions/MemoryCacheExtensions.cs,bc5684b7eae179d4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 2017-03-15
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 2017-06-22
    相关资源
    最近更新 更多