2010-03-07 33 views
2

我打算使用ehcache緩存一些信息。通常情況下,我會遵循以下模式:如何總理緩存並保持更新

if data in cache 
    return from cache 
else 
    lookup from source 
    put into cache 
    return data 

但是對於這些數據,我希望它始終在內存中。我喜歡做的事:

  • 填充緩存,而應用程序服務器啓動(我使用JBoss)
  • 有一個「進程/線程/東西」定期更新緩存

我首先想到的是定義一個具有ServletContextListener的servlet,它執行初始加載,然後啓動一個線程來執行更新。

有沒有更好的方法來做到這一點?

回答

2

您的問題在於決定首先進入緩存的數據。我假設緩存比您希望存儲的數據更小。如果那是不是的情況,爲什麼要使用緩存?只需將數據存儲在內存中並完成它。

話雖如此,一旦你決定,我認爲你的建議沒有錯。在WAS的早期版本中重新加載Java代碼時,我們實際上使用了類似的方案。部分應用服務器的啓動代碼已被修改,以訪問我們想要預編譯的頁面(排序的網頁刮板),以便用戶第一次嘗試訪問它時不會有任何延遲。至於定期更新緩存,這應該由緩存本身來完成。如果所有更改都要通過緩存(後寫或直寫),則緩存應自動爲您更新,而無需單獨的進程。

+0

感謝您的意見。在這種情況下,數據將適合內存。我正在考慮使用Oracle Change Notification和/或觸發器來知道數據何時更改。原因是我無法強制所有更新通過我的應用程序。 – Dave 2010-03-07 17:10:32

相關問題