首页 文章

在 asp.net-mvc 缓存

提问于
浏览
82

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

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

public ActionResult AdvancedSearch(SearchBag searchBag)

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

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

4 回答

  • 74

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

  • 66

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

  • 12

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

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

  • 0

    你可以使用像这样的输出缓存

    [OutputCache(Duration = 10, VaryByParam = "empID")]
          public ActionResult GetEmployeeDetail(int empID)
          {
              Employee e = new Employee();
              return Content(e.getEmployeeDetails(empID));
          }
    

    或者您可以使用缓存配置文件在 Web 配置中设置它

    <caching>
    <outputCacheSettings>
        <outputCacheProfiles>
            <add name="Admin" 
    
            duration="86420" varyByParam="none"/>
        </outputCacheProfiles>
    </outputCacheSettings>
    </caching>
    
    and use this tag
    [OutputCache(CacheProfile="Admin")]
    

相关问题