Ehcache 起源於 Hibernate,現為功能最完整、發展最活躍的 Java 快取框架,支援:
<cache maxElementsInMemory="10000" />
必填,預設 10000。
eternal="true":永不過期,忽略時間設定。timeToIdleSeconds:最大閒置秒數,0 為永不。timeToLiveSeconds:最大存活秒數,0 為永不。memoryStoreEvictionPolicy:LRU(預設)/ FIFO / LFU。overflowToDisk:記憶體滿時是否持久化至磁碟。maxElementsOnDisk:磁碟最大物件數,0 為無限。diskExpiryThreadIntervalSeconds:掃描過期間隔。diskSpoolBufferSizeMB:寫入緩衝區大小。diskPersistent="true":應用重啟時從磁碟載入快取,適用於低變動資料。
<cacheManagerPeerListenerFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
properties="hostName=localhost, port=40001, socketTimeoutMillis=2000" />
<cacheManagerPeerProviderFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
properties="peerDiscovery=manual,
rmiUrls=//host2:40002/com.example.User|//host2:40002/com.example.Role" />
<cacheEventListenerFactory
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
properties="replicateAsynchronously=false,
replicatePuts=false,
replicateUpdatesViaCopy=false" />
建議:replicatePuts=false(因有過期機制),replicateUpdatesViaCopy=false(避免物件複製開銷與鎖爭用,改送失效通知)。
分散式或磁碟持久化環境需註冊關閉監聽器:
<listener><listener-class>net.sf.ehcache.constructs.web.ShutdownListener</listener-class></listener>
支援非快取節點(如批次程式)透過 JMS 發送 PUT/REMOVE/REMOVE_ALL 操作至叢集,提供標準化方案。