2013-03-12 80 views
0

我有一個MVC4網站,我使用OutputCache來緩存顯示多個排名結果頁面的視圖結果。緩存的輸出在頁面參數上有所不同。排名是時間的函數,因此任何給定頁面的結果都可能不同步,具體取決於它們何時被緩存,這是因爲我正在使用可以顯示重複結果的無限滾動機制如果結果被推到下一頁。使用輸出緩存同時編程緩存一堆頁面

這個問題的理想解決方案是一次緩存一些合理數量的頁面。這需要能夠檢查緩存的輸出是否過期,如果緩存的結果過期則重新生成緩存的結果,然後返回緩存的響應。這可能嗎?

我還應該注意到,我正在使用OutputCaching和Azure輸出緩存提供程序,並且我有專用的緩存角色(注意:而不是共享緩存服務)。

任何幫助將不勝感激。

回答

1

這將需要能夠檢查緩存輸出 到期,如果他們到期重新生成緩存的結果,然後返回 緩存的響應。這可能嗎?

這正是OutputCaching的工作原理 - 請求一個頁面,如果它存在於緩存中且未過期,則從緩存中檢索它,否則呈現頁面並更新緩存。

如果數據真的是這樣動態的,那麼您可能會通過緩存輸出而導致更多的工作/問題,而沒有意識到性能會有所提高(KISS在此應用!如果可以避免問題,請不要爲問題創建解決方案在第一位)。

但是,可以使用Azure隊列和工作者角色來完成構建解決方案(如果真的需要)。在添加/更新評分時,讓您的評分引擎在隊列中填入一個值。然後,讓工作者角色每秒輪詢一次隊列(例如)以獲取值。如果找到值,則讓工作者角色對緩存頁面執行Web請求。這將更新輸出緩存,如果它已過期。但是,您仍然受到緩存過期的限制。除非你做的東西像this SO post):

HttpResponse.RemoveOutputCacheItem()可能是你想 使用的方法。如果你能找出什麼名字的動作下緩存, 你可以只刪除特定動作(可以嘗試設置斷點或 所有緩存項的名稱傾倒到屏幕)

+0

我知道這是怎麼OutputCaching ,但都是在幕後完成的。就像我說的,爲了頁面瀏覽,10頁結果沒有重複的結果,所有10頁必須使用相同的結果集同時生成。 – 2013-03-13 01:36:26