2012-09-28 96 views
4

在我的項目中,我們使用Web服務從數據庫獲取數據並將數據從Web服務填充到緩存。 我正在使用絕對過期,並且持續時間設置爲4小時。 因此,4小時後,緩存過期,因此調用Web服務以重新填充緩存中的數據。.Net緩存過期

現在發生的問題是:

有時,建立Web服務和數據庫,因此,網絡服務不返回數據之間的連接有問題。

在這種情況下,緩存填充所有字段的空值和長達4小時緩存(直到它再次到期),它不被重新填充。

我在尋找2種解決方案: 1)我們可以在緩存到期前更新緩存,然後調用Web服務。如果Web服務獲取數據,則覆蓋緩存。 2)緩存永不過期,並且每隔一段時間我們都會產生一個線程,如果我們獲取數據,就會更新緩存。

但我不知道如何實現上述解決方案?有人能給我一些關於技術部分的見解嗎?謝謝您的幫助!

MY填充緩存的當前代碼:

ctx.Cache.Insert("cachename", cacheValue, null, 
       DateTime.Now.AddHours(Int32.Parse(siteViewModel.ApplicationSettings["CacheDurationHours"])), System.Web.Caching.Cache.NoSlidingExpiration, 
      System.Web.Caching.CacheItemPriority.Default, 
      null 
      ); 

回答

4

強似空的,實行CacheItemRemovedCallback作爲最後一個參數來Cache.Insert(..)。當檢索值 以重新填充緩存時,您可以執行空檢查並暫時使用舊值。

+0

我接受這是最可行的解決方案。但我在這裏有一個問題:在應用程序池回收期間會發生什麼? cacheitemremovedcallback會在重啓過程中被觸發嗎?如果是的話,它會有舊的緩存值? – user1165815