2011-05-25 45 views
7

我有很少的表,只有很少的條目,它們不會動態改變。所以我想緩存整個表在內存中減少數據庫的負載。我可以通過靜態地圖輕鬆實現,並在靜態塊中填充地圖。Ehcache vs靜態地圖緩存的實現

我想知道Ehcache + hibernate能否以更有效的方式實現相同?

+0

你能提供簡單的緩存地圖實現嗎? – Rachel 2012-01-31 15:56:42

+1

只需聲明一個公共靜態地圖,在地圖中添加要緩存的值,然後啓動一個線程,該線程將每12小時刷新一次該地圖或某些東西。 – dpsdce 2012-02-02 04:31:21

+0

感謝新手,我已經實施了靜態地圖,但並不是每12小時刷新一次。如果有需要,我會進行調查。 – Rachel 2012-02-02 16:37:20

回答

6

真正的二級緩存優於靜態映射的優點是,通過仍然保持定義,訪問和遍歷實體的相同方式,您可以獲得內存訪問的優勢:通過使用Hibernate會話(或實體經理)。

您可能會與其他實體保持關係(即使沒有被緩存);您可以使用查詢緩存並仍然對這些實體執行查詢(並且這些查詢的結果也將被緩存)。

簡而言之,它是透明的,提供了更多的選項,因爲Bozho說,並且使用起來更容易,因爲緩存的內容與其他實體的使用方式相同。

+0

我同意使用Ehcahe將保持代碼統一(我們訪問其他實體的方式),但有沒有一種方法可以在服務器啓動時預先填充ecache,就像我可以通過靜態塊在地圖實現中一樣初始填充地圖? – dpsdce 2011-05-25 08:56:23

+0

執行加載所有實體的HQL查詢應該這樣做:從CachedEntity中選擇c。 – 2011-05-25 09:35:04

6

的Ehcache具有比地圖更多的功能:

  • 限制元件的存儲器中的最大數
  • 溢出到磁盤(如果超過上述數目)
  • 設定的時間到-live和時間對閒置元素
  • 允許集羣內複製

如果你不需要任何這些,你可以發無需使用地圖 - 它會更容易配置。