2011-10-19 158 views
1

我有一個場景,我使用Spring MVC在網頁上顯示頻繁更改(由外部應用程序更改)數據庫中的數據,有點類似於股票監視應用程序。目前,我正在使用一個守護程序線程,它啓動Web容器並每45秒查詢一次數據庫,並將數據存儲在應用程序範圍的HashMap對象中。 Web應用程序從hashmap(而不是數據庫)讀取數據以顯示數據。Ehcache和休眠

我已經閱讀了第三方緩存API,如EhcacheOSCache。我已經閱讀了關於Ehcache的文檔,似乎我可以使用Hibernate查詢緩存技術而不是守護進程線程。

現在我的查詢是否使用hibernate並啓用查詢緩存並將timetoidle設置爲45秒將會自動刷新緩存中的數據以反映數據庫中的最新數據還是需要強制刷新(再次查詢數據庫並重新填充緩存)緩存,你也可以解釋什麼是自填充緩存。

+0

看到自填充緩存[這裏] [1]。 [1]:http://stackoverflow.com/questions/4648346/how-to-implement-self-populating-ehcache – DarthVader

回答

0

Ehcache docs一個SelfPopulatingCache被描述爲:

爲的Ehcache甲selfpopulating裝飾根據需要創建條目。

這意味着當詢問SelfPopulatingCache的值並且該值不在緩存中時,它會爲您創建此值。 This blog article給出了很多細節和代碼(包括自動更新)。

對我來說,這聽起來是一個Ehcache SelfPopulatingCache是最適合您的需求。所以我建議仔細看看。據我所知,一個Hibernate二級緩存肯定會有助於提高系統性能,但並不能解決你的問題。在使用Ehcache並設置timeToIdleSeconds後,緩存在該時間後過期,但它不會自動刷新。

看看什麼Hibernate docs write about query cache

查詢緩存不會緩存緩存中實際實體的狀態;它只緩存標識符值和值類型的結果。出於這個原因,查詢緩存應始終與第二級緩存結合使用,以便那些希望作爲查詢結果緩存一部分進行緩存的實體(就像集合緩存一樣)。

最後,OSCache已經過時。