在 TEST IIS 机器上使用 C# IMemoryCache 进行永久缓存不起作用
Posted
技术标签:
【中文标题】在 TEST IIS 机器上使用 C# IMemoryCache 进行永久缓存不起作用【英文标题】:Permanent Caching with C# IMemoryCache on TEST IIS Machine does not work 【发布时间】:2022-01-17 06:02:01 【问题描述】:我有一个带有 IIS 服务器的 Windows Server 2019,用于带有 React 前端的 .NET5 应用程序,它使用 IMemoryCache 来存储数据库中的数据。它将超过 5GB 的数据加载到内存中 6 分钟(超过 500 000 000 行)。
当我从 VS Professional 运行应用程序时,缓存可以完美运行超过 6-12 小时(或更长时间),但在我在 IIS 上部署和运行 Web 应用程序后,缓存的运行时间不到 30 分钟
//Simplify class using
using Microsoft.Extensions.Caching.Memory;
//Simplify class var.
private readonly IMemoryCache _memoryCache;
//Simplify class constructor
public GroupLoader(IMemoryCache memoryCache)
_memoryCache = memoryCache;
// Store to CACHE
var cacheExpiryOptions = new MemoryCacheEntryOptions
AbsoluteExpiration = DateTime.Now.AddMonths(6),
Priority = CacheItemPriority.NeverRemove,
SlidingExpiration = TimeSpan.FromDays(180)
;
_memoryCache.Set(cacheKey, data, cacheExpiryOptions);
我不知道问题出在哪里,但是可以使用 IMemoryCache 来永久缓存数据吗?缺少一些 IIS 集?
【问题讨论】:
服务器重启了吗?上面的代码不会从缓存中删除值,因此进程可能正在重新启动,或者某些事情导致插入新值并删除旧值,从而导致缓存未命中。另外,你怎么知道它只工作不到30分钟? 我尝试了 6 次以上,所有结果都相同,我没有重新启动服务器,也没有更改任何内容,只尝试使用浏览器的 Web 应用程序,服务器只有 24 GB 用于我的应用程序。我记录应用再次加载到缓存的时间 也许它会导致 Web 应用程序池的 IIS 设置 - Idle TimeOut,但我认为 IMemoryCache 是共享缓存 IIS 工作进程在许多情况下可以回收/重新启动,因此您不应期望内存中的任何内容 (IMemoryCache
) 是“永久的”。请改用进程外缓存机制。
不建议将memorycache用于永久缓存数据。服务器宕机时很容易丢失数据。您可以使用其他内存数据库。
【参考方案1】:
其中一种可能的设置似乎是这样,无论如何,每天都要清理(回收)内存,所以这是一个临时解决方案。我希望它也对某人有所帮助,因为永久解决方案是使用 InMemory Redis。
IIS -> ApplicationPools ->(选择您的池)-> 高级设置
【讨论】:
以上是关于在 TEST IIS 机器上使用 C# IMemoryCache 进行永久缓存不起作用的主要内容,如果未能解决你的问题,请参考以下文章