6

我不知道我应该使用 httpcontext 缓存还是企业库缓存应用程序块。此外,在删除或更新属于缓存列表的实体时,缓存策略的最佳模式是什么?

我应该从缓存中删除所有列表还是只从缓存列表中删除该项目?如果我更新它,我将从缓存中删除列表或更新其中的实体。

4

3 回答 3

6

在对两者进行了一些测试后,我在我们的代码上下文中对缓存应用程序块进行了全面审查,并在博客中记录了我的经验。它使用起来非常简单,功能强大,足以满足我们的需求。我会推荐它,我的结果被记录在这里

在您的位置上,我将使用存储库模式来维护我的缓存,它适用于数据库数据集,并且应该同样适用于您自己的缓存。如果您不熟悉存储库模式,请查看 Steven Walther 的这篇文章。. 但是,我倾向于不同意先前的答案,只取出您需要修改的项目,其余的保持不变。如果您愿意,这将允许您独立于整个列表使缓存中的项目过期。

于 2008-10-13T22:29:52.097 回答
2

有几种实现缓存的方法,httpcontext 是最简单的一种,但不一定是最差的。看看memcachedMS Velocity,它们都可以用作 ASP.NET 缓存的后端。尤其是 memcached 以做得非常好而闻名。

至于缓存策略:你必须决定什么最适合你。我个人会在更新/删除时从缓存中删除完整列表,而不是试图找出实体是否在列表中,因为它需要一个不平凡的您需要考虑并发问题(锁定列表,因为有人可能会更新/删除另一个实体)。有时在适当的位置更新实体确实有意义(如果您有一个包含所有需要的数据的完整对象),有时这是浪费时间,因为由于某些状态更改,实体应该移动到其他地方(例如,当您排序时LastChangedDate 等)

不要忘记优化您的数据库代码,以便刷新刷新列表不会花费太多时间。

于 2008-10-13T22:27:04.237 回答
0

只需在要缓存的每个操作甚至控制器上使用 [OutputCache(Duration=10, VaryByParam="none")] 即可。

来自http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/improving-performance-with-output-caching-cs

于 2012-06-29T06:55:56.750 回答