0

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

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


让我烦恼的是我在 ASP.NET 缓存的 MSDN 页面上读到的内容:技术和最佳实践

将数据存储在 Cache 中的最简单方法是使用键对其进行分配,就像 HashTable 或 Dictionary 对象一样:

Cache["key"] = "value";

这会将项目存储在缓存中而没有任何依赖关系,因此除非缓存引擎将其删除以便为其他缓存数据腾出空间,否则它不会过期。

最后一点 -缓存引擎删除缓存数据以便为其他缓存数据腾出空间这一事实- 它是否仅适用于上述项目存储在缓存中而没有任何依赖关系的情况我如何确定 myMDXDataSetThatExpiresAtMidnight 缓存引擎不会在其到期时间之前清除缓存?

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

4

1 回答 1

2

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

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

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

于 2013-10-10T14:33:51.393 回答