2012-02-28 12 views
0

我在我的MVC3應用程序中使用System.Runtime.Caching MemoryCache來緩存很少更改,但通常訪問的數據。我已經設定了30分鐘的絕對靈感。這很好。每隔30分鐘,應用程序就會使緩存中的數據到期,然後逐出數據。System.Runtime.Caching Absolute Expiration按設計消除數據,但是如何實現非驅逐即將到期的數據策略?

下一次查詢數據時,系統從數據庫重新加載緩存。

但是,如果緩存被驅逐後數據庫暫時不可用會怎麼樣?這將導致無法從MemoryCache或數據庫獲得任何記錄。這將是理想的過期緩存,但不驅逐數據,直到我確信我可以重新加載它。如果我無法重新加載數據庫中的數據,我想通過說... 5分鐘左右來延長緩存的到期時間,然後重試。最終數據庫會回來。

這個策略是我寧願稍微陳舊的數據也沒有數據。

我的問題是我應該如何使用System.Runtime.Caching創建這種緩存策略。我沒有看到一件事讓我能夠在到期時防止驅逐。有任何想法嗎?

回答

0

我認爲你需要實現自己的OutputCacheProvider,這將讓你控制時,它的時間從緩存中刪除項目時會發生什麼:

http://msdn.microsoft.com/en-us/library/system.web.caching.outputcacheprovider.aspx

你也可以考慮不斷變化的戰略和看着SqlCacheDependency,如果數據庫不可用,我不相信會使緩存的項目無效。

http://msdn.microsoft.com/en-us/library/system.web.caching.sqlcachedependency.aspx

+0

感謝您的信息。好東西! – 2013-07-30 02:59:15