【问题标题】:(ASP.NET Cache API) Is it possible that an item may be removed from cache before its set expiry?(ASP.NET 缓存 API)是否有可能在设置到期之前从缓存中删除项目?
【发布时间】:2013-10-18 08:16:22
【问题描述】:

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

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


让我烦恼的是我在MSDN page on ASP.NET Caching: Techniques and Best Practices上看到的东西:

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

Cache["key"] = "value";

这会将项目存储在缓存中而没有任何依赖关系,所以它 除非缓存引擎将其删除以使 额外缓存数据的空间。

最后一点 - 缓存引擎删除缓存数据以便为额外的缓存数据腾出空间这一事实 - 它是否仅适用于上述情况项目所在的位置存储在缓存中,没有任何依赖项如何确保 myMDXDataSetThatExpiresAtMidnight 缓存引擎不会在到期前清除缓存?

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

【问题讨论】:

    标签: c# asp.net caching


    【解决方案1】:

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

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

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

    【讨论】:

    • 很好的答案,正是我想要的。谢谢!
    猜你喜欢
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    • 2010-11-08
    • 2010-11-28
    • 1970-01-01
    • 2017-05-28
    相关资源
    最近更新 更多