gpt4 book ai didi

c# - 页面刷新后 HttpContext.Current.Cache 项为空

转载 作者:太空狗 更新时间:2023-10-29 21:28:37 28 4
gpt4 key购买 nike

我有一个 C# 网页,我在其中使用 HttpContext.Current.Cache 在服务器缓存中存储一​​个 List<> 对象。该对象在第一次页面加载后保存在缓存中。但是,当我刷新页面时,缓存对象为空。有什么想法吗?

此外,我想设置一个“作业”以每 30 分钟重新创建一次该对象。我想在创建新版本之前提供缓存版本,然后用新版本替换旧版本。我该怎么做?

在我的 Global.asax 中,在 Application_Start 中,我有以下内容:

HttpRuntime.Cache.Insert("MainADList", Uf.GetUsers(), null, Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(30));

当我需要它时,我会执行以下操作:

 MainADList = (Users)HttpRuntime.Cache["MainADList"];

这大部分是空的。不总是,但几乎总是。

最佳答案

即使您使用 Cache.NoAbsoluteExpiration + Cache.NoSlidingExpiration 填充缓存,ASP.NET 也可以从缓存中删除项目(即:当空闲系统内存不足时低)。

CacheItemPriority.NotRemovable 传递给 Cache.Insert() 以防止这种情况发生。 Lookup CachéItemPriority on MSDN.

IIS 应用程序池因长时间空闲、web.config/binary 更改等而重新启动,也会删除您的缓存。检查this other SO post, HttpRuntime.Cache.Insert() Not holding cached value

关于创建刷新缓存的作业;我认为最佳缓存策略没有经验法则。这在很大程度上取决于您的用户与您的网页交互的方式、频率、并发程度,特别是在未命中缓存时生成该数据需要多少时间。

如果生成数据所花费的时间对于任何用户来说都是 Not Acceptable ,您可以设置一个刷新缓存的作业,但它的间隔应该小于缓存 TTL + 生成/检索所花费时间的总和.例如,如果您的缓存为 30m,生成数据需要 2m,则刷新间隔必须为 28m 或更短,以避免任何用户访问空缓存。

关于c# - 页面刷新后 HttpContext.Current.Cache 项为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14421744/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com