2013-05-07 84 views
1

我有一個asp.net web應用程序。我將一些從數據庫讀取的數據添加到HttpContext.Cache中,但我希望每15分鐘從數據庫中重新讀取數據並將其設置在緩存中。我該怎麼做呢?我將緩存中的條目添加到15分鐘後過期。在向緩存對象添加數據時,我查看了'CacheItemRemovedCallback',但在此回調中,HttpContext沒有初始化,它回滾爲空,因此我無法將數據添加到緩存中。有沒有一種機制可以實現這一目標?在asp.net web應用程序中每隔幾分鐘刷新一次緩存

+0

你可以在加載頁面時檢查緩存鍵是空還是空。那麼,如果是空的,重新填充?這也可以防止應用程序池重新啓動時出現問題。 – 2013-05-07 17:13:47

+0

我已經這樣做了,但需要設置的數據在較大的一面稍微有點,需要幾秒鐘,我試圖避免用戶頁面加載的延遲。 – 2013-05-07 17:18:30

+1

當'CacheItemRemovedCallback'被調用時,您只需要'System.Web.Caching.Cache'來創建緩存。在創建緩存之前,您是否需要從'HttpContext'中取回某些內容? – Win 2013-05-07 18:27:53

回答

1

爲什麼不設置一個時間事件以像global.asax中應用程序啓動事件那樣的所需間隔重新填充緩存。這不會延誤任何用戶的用戶界面。

protected void Application_Start() 
{ 
    Timer customTimer = new Timer(); 
    customTimer.Elapsed += new ElapsedEventHandler(YourHandler.YourRepopulationEvent); 
    customTimer.Interval = YourInterval; 
    customTimer.Start(); 
} 
+1

感謝您的回覆。我從來沒有使用Application_Start事件,因爲你的帖子,我查了一下,學到了一些新東西。對於我上面的場景,我將使用HttpRuntime.Cache而不是HttpContext.Current.Cache進行回調。我知道緩存將不會準備好,直到頁面的第一個請求。我想我會和它一起生活。 – 2013-05-07 19:27:35