[英]MVC Donut Caching not working as expected once deployed online
我們正在使用MVC Donut Caching,並且整天都試圖調試這個問題,我仍然無法找到解決方案。
我們選擇在OutputCache上開始使用DonutOutputCache屬性,並且通過日志記錄已經注意到,根據緩存參數,沒有緩存具有DonutOutputCache屬性的某些部分視圖操作。
我們有一個帶有以下嵌套部分視圖的View(索引)。 具有指定的donut cache屬性的那些列在方括號中。
[DonutOutputCache(Duration = 3600)]
[DonutOutputCache(Duration = 3600)]
通過日志記錄,我們發現_HeaderMainMenu部分視圖操作實際上在不到一個小時的時間內被多次調用。
這沒有發生:
對於可能是什么原因的任何見解?
謝謝你的幫助!
在下載並檢查MVC Donut Caching項目的源代碼之后,我們終於找到了解決這個問題的原因。
此項目中定義的DonutOutputCache屬性使用IKeyBuilder生成用於存儲輸出HTML的緩存鍵。項目附帶的默認DevTrends.MvcDonutCaching.KeyBuilder類生成一個由以下部分組成的鍵:
CacheSettings.Options
參數值(取決於設置了OutputCacheOptions.IgnoreQueryString
標志的CacheSettings.Options
) OutputCacheOptions.IgnoreFormData
標志的CacheSettings.Options
) VaryByParam
屬性設置為:
none
,然后清除所有查詢字符串/表單/路由值 *
之外的任何東西,那么它只會考慮這些參數 VaryByCustom
參數最終將在System.Web.HttpApplication
調用相同的GetVaryByCustomString
密鑰生成器。 上面生成的密鑰對我們造成了問題,因為當我們不知道這些參數時,正在生成一個不同的密鑰。 出於這個原因,這些方法被多次調用,因為網站是在產品服務器,用戶,搜索引擎,機器人和其他具有不同查詢字符串/表單/路由值的請求上傳遞的,因此生成了新密鑰。
我們的解決方案是創建我們自己的自定義IKeyBuilder
而不是默認的IKeyBuilder
並解決了這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.