ehcache持久化

呂建奎發表於2015-06-24
cache的屬性有如下幾個

name:Cache的唯一標識
maxElementsInMemory:記憶體中最大快取物件數。
maxElementsOnDisk:磁碟中最大快取物件數,若是0表示無窮大。
eternal:Element是否永久有效,一但設定了,timeout將不起作用。
overflowToDisk:配置此屬性,當記憶體中Element數量達到maxElementsInMemory時,Ehcache將會Element寫到磁碟中。
timeToIdleSeconds:設定Element在失效前的允許閒置時間。僅當element不是永久有效時使用,可選屬性,預設值是0,也就是可閒置時間無窮大。
timeToLiveSeconds:設定Element在失效前允許存活時間。最大時間介於建立時間和失效時間之間。僅當element不是永久有效時使用,預設是0.,也就是element存活時間無窮大。
diskPersistent:是否快取虛擬機器重啟期資料。(Server重啟時將快取序列化到本地,後再載入,保證快取在重啟後依然有效)。
diskExpiryThreadIntervalSeconds:磁碟失效執行緒執行時間間隔,預設是120秒。
diskSpoolBufferSizeMB:這個引數設定DiskStore(磁碟快取)的快取區大小。預設是30MB。每個Cache都應該有自己的一個緩衝區。
memoryStoreEvictionPolicy:當達到maxElementsInMemory限制時,Ehcache將會根據指定的策略去清理記憶體。預設策略是LRU(最近最少使用)。你可以設定為FIFO(先進先出)或是LFU(較少使用)。這裡比較遺憾,Ehcache並沒有提供一個使用者定製策略的介面,僅僅支援三種指定策略,感覺做的不夠理想。

下面說下最近使用到的磁碟持久化與載入功能,由於之前使用過程中一般為直接快取,而最近想到使用diskPersistent來配置本地磁碟持久化,實現此功能其實非常簡單,只用簡單的將diskPersistent配置為true,以tomcat為例,在重啟時候需要告知EhCache,你要重啟了,讓EhCache去序列化內容到磁碟,此過程可以自己寫監聽實現重啟時呼叫CacheManager的shutdown,也可以直接使用EhCache提供的監聽類net.sf.ehcache.constructs.web.ShutdownListener,但是有一點需要注意,就是在使用此項功能時,必須保持重啟或者關閉Server採用的是正常手段關閉,直接殺程式之類的關閉時完全不生效的。

在配置檔案中,則需配置Bootstrapcacheloaderfactory,使用

<bootstrapCacheLoaderFactory

class=”net.sf.ehcache.store.DiskStoreBootstrapCacheLoaderFactory”

properties=”bootstrapAsynchronously=true”/>


在web.xml裡邊配置監聽

<listener>
        <listener-class>net.sf.ehcache.constructs.web.ShutdownListener</listener-class>
    </listener>

相關文章