2008-12-22 414 views
81

我想在我的asp.net-mvc網站中緩存我的大部分數據庫繁重的操作。 在我的研究,我發現緩存在asp.net-mvc

但我覺得我還沒有得到它。
我希望能夠緩存我的POST請求取決於幾個部分。這些語法在一個對象中。所以,我想緩存以下請求的結果:

public ActionResult AdvancedSearch(SearchBag searchBag) 

凡searchBag是可選的搜索參數保持對象(一羣)。 我的看法本身很輕(應該是),但數據訪問可能相當耗時,取決於搜索包中填充的字段。

我感覺我應該緩存在我的數據層上,而不是在我的操作上。
我該如何在OutputCache屬性中使用VaryByParam?

+2

有你的VaryByParam = 「searchBag.property」 試過嗎? – 2008-12-22 11:14:27

+0

不,我沒有。將嘗試你說的話。但是如何枚舉幾個參數呢? – 2008-12-22 13:34:21

+2

的VaryByParam =「firstParam; secondParam; thirdParam」 – 2009-11-10 12:15:02

回答

73

我喜歡在模型或數據層中緩存。這隔離了從控制器/演示中檢索數據所做的一切。您可以從System.Web.HttpContext.Current.Cache訪問ASP.NET緩存或使用企業庫中的緩存應用程序塊。爲查詢的參數創建緩存數據的密鑰。更新數據時一定要使緩存失效。

65

或者你可以從HttpRuntime.Cache獨立的HttpContext.Current和訪問緩存的:)

11

通常情況下,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")]