我想在我的 asp.net-mvc 站点中缓存我的大多数数据库繁重的操作。在我的研究中,我发现了
-
甜甜圈缓存在 Phil 的博客上
-
Caching/compressing过滤 Kazi 的博客
-
Scott Hansleman 关于他们如何在 SO 中缓存内容的播客。
但我觉得我还没有得到它。
我希望能够根据几个部分缓存我的 POST 请求。这些语句位于对象中。所以我想缓存以下请求的结果:
public ActionResult AdvancedSearch(SearchBag searchBag)
其中 searchBag 是一个包含(一堆)可选搜索参数的对象。我的观点本身很轻(应该如此),但数据访问可能相当耗时,具体取决于搜索包中填写的字段。
我觉得我应该缓存数据层,而不是我的行为。
我怎么在 OutputCache 属性中使用 VaryByParam?
4 回答
我也想在模型或数据层中缓存。这隔离了与从 controller/presentation 中检索数据有关的一切。您可以从
System.Web.HttpContext.Current.Cache
访问 ASP.NET 缓存或使用企业库中的缓存应用程序块。从查询参数中为缓存数据创建密钥。更新数据时,请务必使缓存无效。或者您可以独立于 HttpContext.Current 并从 HttpRuntime.Cache :)访问缓存
通常,OutputCaching 可以是最快速和最有效的,但只有在满足您的要求时才能实现。如果错误的话,没有必要快速有效! ;)
在这种情况下,听起来数据层的缓存是正确的,因为您有复杂的缓存需求。有时,如果控制缓存输出的参数集很简单,则可以将两者结合起来。
你可以使用像这样的输出缓存
或者您可以使用缓存配置文件在 Web 配置中设置它