2011-11-15 41 views
0

我的代碼已經有這樣的事情在控制器:從數據庫中緩存數據的選項?

[OutputCache(Duration = 86400] 
    public string SelectTopics(bool showAll = true, string topicID = null) 
    { 
     return SelectHelper.Topics(showAll, topicID); 
    } 

上午我在說這句話的糾正將被緩存?

如何在外部非控制器類和方法。有什麼辦法可以使用這些數據庫緩存或必須通過控制器進行所有數據庫緩存?如何訪問數據的其他方式/手段呢?還有什麼可以緩存?

+0

你想緩存html輸出或數據庫中的項目列表嗎? –

回答

2

我正確地說這將被緩存嗎?

這會緩存整個HTML輸出。這意味着如果輸出緩存,控制器操作甚至不會執行。在這種情況下,SelectHelper.Topics將不會運行。

其他緩存數據的方式涉及使用System.Runtime.Caching命名空間中的類。它們允許您將NET對象存儲到緩存中。例如,您可以將從數據庫調用中檢索到的結果存儲到緩存中,然後在下次訪問數據庫之前檢查緩存是否包含這些結果。舉例來說,您可以查看MemoryCache類。

+0

感謝Darin,你提到控制器的行爲不會被執行。但是,我是否正確地說,在每次調用操作時,我仍然會返回相同的字符串,直到緩存過期?如果是這種情況,那很好,因爲話題不會經常變化。 –

+2

@Melissa,你完全正確的說,每個請求將獲得完全相同的HTML輸出,直到緩存期限到期。但要小心:如果這個HTML包含一些用戶特定的部分(比如說你有一段你在說「Welcome John」,其中John是當前登錄用戶的名字)。由於頁面將被緩存,並且所有後續請求都會從緩存中獲取此頁面,如果Marry登錄到您的站點並請求頁面,她將看到「Welcome John」,因爲她將看到該頁面的緩存版本。 –

+0

+1 @Darin,您始終具有適當的詳細程度:-) –