簡體   English   中英

Azure中的.NET MVC5應用程序的OutputCache迅速脫離緩存

[英]OutputCache of .NET MVC5 App in Azure Falls Out of Cache Quickly

我的目標基本上一直緩存所有頁面,以便用戶很少需要訪問我的CMS來獲取內容。

我已經在Azure中部署了ac#/。Net MVC 5 Web App。 我還將控制器上的所有OutputCache設置為1周[604800s](內容很少更改)。 我天真地假定,緩存的輸出存儲在Azure的內存中。 但是,當我啟動應用程序並爬網網站時,我希望Azure內存充滿緩存的內容,但實際上,內存利用率可能會有所提高。 大約5分鍾后,它恢復到60%利用率的“靜止狀態”。 我也嘗試過使用MemoryCache ,但是它具有類似的結果-內存使用量增加,並且很快就恢復為正常。

無論如何,結果是頁面的行為就像它們沒有被緩存一樣。 例如,如果我抓取1頁並訪問它-它的加載時間約為1秒(已緩存)。 如果我抓取了2000頁並訪問了隨機的頁面,則它會在3-4秒內加載(未緩存)。 我已經通過在視圖本身中放置日期時間進行了測試。

所以...最重要的是:緩存=快速,而不是緩存=平均。 我希望它快!

我看過Redis Cache,這可能是實現此目的的一種方法,而且看起來很容易...但是我的直覺說這應該是基本功能(因為它已內置在框架中)。

Azure Web App確實支持內存OutputCache。 我們可以使用以下代碼輕松確認它。 刷新TestCache頁面后,輸出日期時間將不會更改。

[OutputCache(Duration = 3600)]
public ActionResult TestCache()
{
    return Content(DateTime.Now.ToString());
}

但是在Azure Web App中使用內存緩存時會出現一些問題。

這樣做的第一個問題是,它限制了您在Web應用程序實例上可用的內存,並且當您緩存大量頁面輸出數據時,這可能會導致內存不足問題。 如果您的內存已滿,將重新啟動您的Web應用程序。 如果重新啟動Web應用程序,所有緩存的內容將丟失。 另一個問題是您的應用程序在多個負載平衡的實例上運行。 下一個請求可能會轉到另一個實例,該實例還將在該實例中創建ASP.NET輸出緩存數據的新副本。 每個Web角色實例中頁面輸出的這些冗余副本會占用大量額外的內存。

為避免上述問題,建議您使用Redis Cache來存儲緩存的內容。 有關如何使用Redis緩存的信息,下面的鏈接供您參考。

用於Azure Redis緩存的ASP.NET輸出緩存提供程序

暫無
暫無

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

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