【问题标题】:How can I implement Caching Strategy in my Asp.net Mvc With linq2sql repository?如何使用 linq2sql 存储库在我的 Asp.net Mvc 中实现缓存策略?
【发布时间】:2010-09-16 23:33:32
【问题描述】:

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

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

【问题讨论】:

    标签: asp.net-mvc linq-to-sql caching datacontext


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      不要忘记优化你的数据库代码,这样刷新刷新的列表就不会花费太多时间。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2011-04-09
          • 2014-10-05
          • 2010-12-12
          • 2014-05-13
          • 1970-01-01
          • 1970-01-01
          • 2011-11-12
          • 2010-10-26
          • 2011-07-08
          相关资源
          最近更新 更多