【发布时间】: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 相关吗?