在asp.net-mvc中缓存

Bor*_*ens 82 asp.net-mvc caching

我想在我的asp.net-mvc网站中缓存我的大多数数据库繁重的操作.在我的研究中,我发现了

  • 甜甜圈在Phil的博客上缓存
  • 在Kazi的博客上缓存/压缩过滤器
  • Scott Hansleman关于他们如何在SO中缓存内容的播客.

但我觉得我还没有得到它.
我希望能够根据几个部分缓存我的POST请求.这些语句位于对象中.所以我想缓存以下请求的结果:

public ActionResult AdvancedSearch(SearchBag searchBag)
Run Code Online (Sandbox Code Playgroud)

其中searchBag是一个包含(一堆)可选搜索参数的对象.我的观点本身很轻(应该如此),但数据访问可能相当耗时,具体取决于搜索包中填写的字段.

我觉得我应该缓存数据层,而不是我的行为.
我怎么在OutputCache属性中使用VaryByParam?

Mat*_*hew 74

我也想在模型或数据层中缓存.这隔离了与从控制器/演示文稿中检索数据有关的一切.您可以System.Web.HttpContext.Current.Cache从企业库中访问ASP.NET缓存或使用缓存应用程序块.从查询参数中为缓存数据创建密钥.更新数据时,请务必使缓存无效.

  • 缓存应用程序块看起来像一堆乱七八糟的东西.我发现在几乎每个实例中HttpRuntime.Cache都足够了. (17认同)
  • 我认为这是"添加正确的配置行"步骤,让一些人感到烦恼. (6认同)
  • 为什么矫枉过正?我现在进一步深入开发,我发现EL的缓存系统非常容易使用.引用正确的库,添加正确的配置行,您可以使用一行代码开始缓存和检索对象. (3认同)

And*_*nea 66

或者你可以独立于HttpContext.Current并从HttpRuntime.Cache访问Cache :)


Haa*_*ked 12

通常,OutputCaching可以是最快速和最有效的,但只有在满足您的要求时才能实现.如果错误的话,没有必要快速有效!;)

在这种情况下,听起来数据层的缓存是正确的,因为您有复杂的缓存需求.有时,如果控制缓存输出的参数集很简单,则可以将两者结合使用.