我不知道是否应该使用httpcontext缓存或企业库缓存应用程序块。此外,在删除或更新属于缓存列表的实体时,缓存策略的最佳模式是什么?
我应该从缓存中删除所有列表还是仅从缓存列表中删除该项? 如果我更新它,我将从缓存中删除列表或更新其中的实体。
答案 0 :(得分:6)
我们对两者进行了一些测试后,我在代码的上下文中对缓存应用程序块进行了全面审查,并写了我的经验。它使用起来非常简单,功能强大,足以满足我们的需求。我会推荐它,my results were blogged here。
在我的位置,我将使用Repository模式来维护我的缓存,它适用于数据库数据集,并且对于您自己的缓存应该同样有效。如果您不熟悉存储库模式check out this post from Steven Walther.。我倾向于不同意之前的答案,但是只取出你需要修改的东西,并且不接触其余的东西。如果您愿意,这将允许您从整个列表中独立地使缓存中的项目失效。
答案 1 :(得分:2)
实现缓存有几种方法,httpcontext是最简单的方法,但它不一定是最差的。查看memcached或MS Velocity,这两者都可以用作ASP.NET缓存的后端。特别是memcached的声誉非常出色。
至于缓存策略:你必须决定什么最适合你。我个人会在更新/删除时从缓存中删除完整列表,而不是试图找出实体是否在列表中,因为它需要一个非常重要的时间,你需要考虑并发问题(锁定列表,因为有人可能会更新/删除另一个实体)。 有时更新一个实体是有意义的(如果你有一个包含你需要的所有数据的完整对象),有时这是浪费时间,因为由于一些状态改变,实体应该移动到其他地方(例如,当你排序时LastChangedDate等。)
不要忘记优化您的数据库代码,以免刷新刷新列表花费太多时间。
答案 2 :(得分:0)
只需使用[OutputCache(Duration = 10,VaryByParam =“none”)] 在您要缓存的每个操作甚至控制器上。