我有一個asp.net web應用程序。我將一些從數據庫讀取的數據添加到HttpContext.Cache中,但我希望每15分鐘從數據庫中重新讀取數據並將其設置在緩存中。我該怎麼做呢?我將緩存中的條目添加到15分鐘後過期。在向緩存對象添加數據時,我查看了'CacheItemRemovedCallback',但在此回調中,HttpContext沒有初始化,它回滾爲空,因此我無法將數據添加到緩存中。有沒有一種機制可以實現這一目標?在asp.net web應用程序中每隔幾分鐘刷新一次緩存
1
A
回答
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
1
可能你可以在高速緩存中使用回調。請參閱下面的鏈接 Callback when cache expires in asp.net
你可以在加載頁面時檢查緩存鍵是空還是空。那麼,如果是空的,重新填充?這也可以防止應用程序池重新啓動時出現問題。 – 2013-05-07 17:13:47
我已經這樣做了,但需要設置的數據在較大的一面稍微有點,需要幾秒鐘,我試圖避免用戶頁面加載的延遲。 – 2013-05-07 17:18:30
當'CacheItemRemovedCallback'被調用時,您只需要'System.Web.Caching.Cache'來創建緩存。在創建緩存之前,您是否需要從'HttpContext'中取回某些內容? – Win 2013-05-07 18:27:53