我的任务是在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或类似设置,以确保不会无意中清除缓存?
答案 0 :(得分:2)
可以随时删除所有条目,包括具有依赖项的条目。依赖关系只是帮助缓存引擎计算项目何时到期。
您无法以任何方式强制您的项目留在缓存中。缓存可能会因已知,未知和其他原因将其删除。通常是由于到期(基于时间或依赖性)或内存压力。但是,您可以使用接受CacheItemRemovedCallback onRemoveCallback
的{{3}},{{1}}可能是计算新项目(或知道旧项目)的函数,并再次添加。我不确定实际时间,但我想有一个短暂的时间,项目不在缓存中,而你的回调被执行但尚未添加新项目。
您可以使用web.config中的Cache.Add overload配置缓存。