(ASP.NET 缓存 API)是否有可能在设置的过期之前从缓存中删除项目

本文关键字:缓存 过期 删除项目 设置 NET ASP API 有可能 是否 | 更新日期: 2023-09-27 18:34:41

我的任务是在Web应用程序上实现服务器端缓存,以提高前端的性能。目标是缓存由 SSAS 多维数据集上的 MDX 查询生成的大型数据集。缓存将在午夜过期,即每天处理多维数据集的时间。我决定使用 Cache.NET API,所以我有这个:

Cache.Insert("MDXResult", myMDXDataSetThatExpiresAtMidnight, null,
    DateTime.Now.AddMinutes(getMinutesUntilMidnight()), TimeSpan.Zero);


困扰我的是我在 MSDN 页面上读到的 ASP.NET 缓存:技术和最佳实践:

在缓存中存储数据的最简单方法是简单地分配它, 使用键,就像 HashTable 或 Dictionary 对象一样:

Cache["key"] = "value";

这会将项目存储在缓存中,没有任何依赖项,因此它 不会过期,除非缓存引擎将其删除以使 空间用于其他缓存数据。

最后一点 - 缓存引擎删除缓存数据以便

为其他缓存数据腾出空间的事实 - 它是否仅适用于上述情况,其中项目存储在缓存中而没有任何依赖项我怎么能确定缓存缓存引擎在到期时间之前不会清除myMDXDataSetThatExpiresAtMidnight

或者,有没有办法控制为服务器端缓存分配的空间量,例如 web.config 或类似设置,以确保不会无意中清除缓存?

(ASP.NET 缓存 API)是否有可能在设置的过期之前从缓存中删除项目

所有条目(包括具有依赖项的条目(都可以随时删除。依赖项只是帮助缓存引擎计算项目何时过期。

不能以任何方式强制项目保留在缓存中。缓存可能会出于已知、未知和其他原因将其删除。通常是由于过期(基于时间或依赖关系(或内存压力。但是,您可以使用 Cache.Add 重载,它接受一个CacheItemRemovedCallback onRemoveCallback,该可能是计算新项目(或知道旧项目(并再次添加它的函数。我不确定实际时间,但我想有一段时间该项目不在缓存中,而您的回调已执行并且尚未添加新项目。

您可以使用 web.config 中的缓存部分配置缓存。