簡體   English   中英

緩存策略,輸出緩存與數據緩存還是兩者兼而有之?

[英]Caching strategy, Output Cache vs Data Cache or both?

我正在開發一個ASP.NET MVC項目,我已經開始考慮我的緩存策略了。 我試圖讓我的框架盡可能開放用於緩存。

根據我在Scott Hanselman播客期間聽到的內容,StackOverflow.com使用頁面輸出緩存並將內容拉鏈並將其放入RAM中。 這聽起來像是對用戶范圍的緩存非常有用,但對於像個性化頁面這樣的東西,你必須為每個用戶緩存一個版本,並且可能很快失控。

所以,對於緩存策略。 哪個應該使用,輸出緩存,數據緩存還是組合? 我的第一個想法是兩者,但就緩存依賴性而言,它聽起來有點復雜。

我們正在大規模(每天訪問300萬次)網站(新聞門戶網站)進行API和輸出緩存。 該網站主要由匿名用戶使用,但我們確實有經過身份驗證的用戶,我們只為他們緩存一個完整的網站,因為該網站的一些個性化部分,我必須承認我們絕對沒有內存壓力問題。

因此,我的建議是在API緩存中緩存所有內容,以便更快地進行輸出緩存重建。

當然,請密切關注性能計數器中的緩存比值。 您應該看到數量> 95%的緩存命中數。

要注意的另一件事是緩存失效,如果你有很多相關內容,這是一個大問題。 例如,您可以緩存音樂內容,並且可以在幾百頁上顯示和緩存有關一個專輯或歌曲的信息。 如果該歌曲有任何變化,您必須使所有這些頁面無效,這可能會有問題。

最重要的是,緩存是ASP.NET的最佳功能之一,它完美無缺,你可以依賴它。

過度激進的緩存要小心。 雖然緩存是一種幫助提高性能的工具,但如果使用不當,實際上可能會使性能變差。

如果不了解有關項目的更多詳細信息,我無法回答輸出緩存或數據緩存是否會對您更有效。 我可以幫助提供幾個何時使用另一個的例子。

如果您有一個特定的數據集,您可以在許多不同的視圖中使用這些數據集,那么最好使用數據緩存。 如果您的數據提取操作相對於數據呈現非常常見且昂貴,則可以使用此方法。 如果您有多個使用相同數據的視圖,則可以節省數據提取時間。

如果您有一個使用非常特定數據集的視圖並且視圖的呈現很復雜並且經常請求此視圖(例如,堆棧溢出的主頁),那么您將從輸出緩存中受益匪淺。

所以最后,它確實取決於您的需求,並且小心使用緩存不正確。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM