ehcache快取說明

2021-09-01 01:19:42 字數 2771 閱讀 7600

**:

配置檔案例子:

ehcache>

1. 預覽

ehcache 從 hibernate 發展而來,逐漸涵蓋了cahce界的全部功能,是目前發展勢頭最好的乙個專案。

標準快取

分布式快取(基於rmi/jgroups/jms)

url,頁面片段快取(類似oscache的相關部分)

**快取伺服器(類似memcached)

2. 基本功能與配置

ehcache的基本功能,可以從配置檔案中學習。詳見ehcache的文件

總的來說,快取與hashmap的最大不同,就是快取設想記憶體是有限的,快取的時效性也是有限的,所以可以設定記憶體數量的大小,可以執行失效演算法 ,可以在記憶體滿了的時候,按照最少訪問等演算法將快取直接移除或切換到硬碟上。

另外注意,ehcache的cachemanager本身有一定的預設值。而在沒有指定ehcache.xml的情況下, 會使用ehcache.jar裡自帶的ehcache_failsafe.xml,

2.1 物件在記憶體中的最大數量

因為記憶體是有限的,所以必須用maxelementsinmemory(必填項)設定每類物件在記憶體中的最大數量。ehcache_failsafe.xml 中為10000。

2.2 到達記憶體中最大量時的過期/移出演算法

過期演算法: 如果快取已經失效,人道毀滅之。失效演算法由3個引數組成:

eternal(必填項):如果為true,則永不過期,忽略後兩個引數的設定。ehcache_failsafe.xml 為false.

timetoidleseconds: 空閒無訪問時間,預設為0,永不過時。ehcache_failsafe.xml 設為120秒。

timetoliveseconds: 空閒無訪問時間,預設為0,永不過時。ehcache_failsafe.xml 設為120秒。

移出演算法:如果經過失效演算法後,還是有很多有效的快取,則執行清除演算法。清除演算法由兩個引數組成:

memorystoreevictionpolicy: 預設為lru(最近最少訪問),另有先進先出(fifo),最少訪問次數(lfu)

overflowtodisk(必填項) 為true,則將清除出來的快取持久化到磁碟,否則人道毀滅之。

2.3 儲存到硬碟

maxelementsondisk,預設為0,無限多。ehcache_failsafe.xml為10000000。

diskexpirythreadintervalseconds:使用過期演算法清除磁碟中失效物件的間隔,預設為120秒。

diskspoolbuffersizemb ,預設為30m。

2.4 重啟時快取持久化

diskpersistent 當應用重啟時,可將快取先持久化到硬碟,重啟後再行載入,節省大量的重新從資料庫載入。但只適合那些快取不怎麼變化,或者有特殊機制保證重啟後應用能接收到重啟這段時間裡快取變化資訊的情況。

3. 分布式快取

ehcache 有傳統的rmi,1.5版的jgroups,1.6版的jms,隨大流還是先用rmi的好些。

3.1設定自身

這裡設定在localhost的40001埠上偵聽。如果要互相同步的cahcemanager不都在一台機器上的話,hostname應該是實際ip。)

3.2 設定需要同步的對方伺服器及快取物件,

這裡設定與40002埠上的cachemanager同步user與role物件,如果還有第三台機器,則繼續用|分割,繼續往下列。同理,在40002埠上的cachemanager的ehcache.xml裡,就需要配置與400001,40003的互通)

也有自動發現,廣播的簡單配法,但對廣播天然恐懼,還是辛苦一點乙個個靜態列表配置檔案的寫了,雖然有點煩。

3.3 快取物件的配置

往每乙個需要快取的物件加入子物件cacheeventlistene***ctory

propertyseparator="," />

replicateasynchronously 物件同步是否非同步完成,預設為true。如果比較緊急就設為false。 在一致性時間性要求不強的時候,設為非同步可大大提供效能,因為它是非同步立即返回的,而且可以批量提交。

replicateupdatesviacopy 是否將物件變更複製到所有節點,還是只是傳送乙個失效資訊,讓對方該快取失效,當對方需要該快取時重新計算載入。

預設為true。鑑於物件複製的消耗挺大的,又有鎖的問題,而且對方也未必需要該物件,所以此屬性建議設為false。如果業務上真的需要設為true時,就可考慮使用terracotta了。

replicateputs、replicateupdates、replicateremovals 增刪改是否同步,預設都為true。但因為我們前面選擇了失效演算法,所以replicateputs 要設為false。

所以我們一般的設定如下:

3.4 shutdown

在分布式環境或持久化硬碟時,需要呼叫cachemanager的shutdown操作,hibernate會自動shutdown它自己的cachemanager,如果在hibernate之外使用,你需要增加:

net.sf.ehcache.constructs.web.shutdownlistener

4.jms式併發同步

與其他同步方式相比,jms同步支援了非cache節點的程式對cahce的修改。

在分布式快取中有一種需求:應用節點更改資料庫資料後,需要通知所有快取集群的節點,通常大家都是自行通過jms實現的,而ehcache的jms replicator 提供了一種標準的方案,提供put,remove,remove_all的標準操作。

Ehcache快取配置

cache配置 name cache的唯一標識 maxelementsinmemory 記憶體中最大快取物件數。maxelementsondisk 磁碟中最大快取物件數,若是0表示無窮大。eternal element是否永久有效,一但設定了,timeout將不起作用。overflowtodisk ...

ehcache 快取使用

一 詳細配置步驟 1,新增ehcache.xml檔案 將ehcache.xml檔案新增到src路徑下面。ehcache.xml檔案內容如下 2,新增spring配置檔案 二 使用 1,定義ehcache工具方法 public class ehcache public cache getcache p...

Ehcache快取模式

ehcache快取模式 簡介 快取有多種不同的快取模式。以下是ehcache支援的快取模式 直接操作 direct manipulation 推送模式 pull through 自填充 self populating 直接操作 direct manipulation 你可以通過方法cache.put...