轉載已查不到出處
一、簡介
非常簡單,而且易用。
ehcache 是一個非常輕量級的緩存實作,而且從1.2 之後就支援了叢集,而且是hibernate 預設的緩存provider。ehcache 是一個純Java的程序内緩存架構,具有快速、精幹等特點,是Hibernate中預設的CacheProvider。
ehcache可以直接使用。也可以和Hibernate對象/關系架構結合使用。還可以做Servlet緩存。
Cache 存儲方式 :記憶體或磁盤。
官方網站:http://ehcache.sourceforge.NET/
主要特征:
1. 快速.
2. 簡單.
3. 多種緩存政策
4. 緩存資料有兩級:記憶體和磁盤,是以無需擔心容量問題
5. 緩存資料會在虛拟機重新開機的過程中寫入磁盤
6. 可以通過RMI、可插入API等方式進行分布式緩存
7. 具有緩存和緩存管理器的偵聽接口
8. 支援多緩存管理器執行個體,以及一個執行個體的多個緩存區域
9. 提供Hibernate的緩存實作
10. 等等
二、快速上手
1、 項目類庫中添加ehcache.jar;
2、 在類路徑下編寫ehcache.xml配置檔案。
三、配置檔案參數詳解
ehcache.xml是ehcache的配置檔案,并且存放在應用的classpath中。下面是對該XML檔案中的一些元素及其屬性的相關說明:
<diskStore>元素:指定一個檔案目錄,當EHCache把資料寫到硬碟上時,将把資料寫到這個檔案目錄下。 下面的參數這樣解釋:
user.home – 使用者主目錄
user.dir – 使用者目前工作目錄
java.io.tmpdir – 預設臨時檔案路徑
<defaultCache>元素:設定緩存的預設資料過期政策。
<cache>元素:設定具體的命名緩存的資料過期政策。
<cache>元素的屬性
name:緩存名稱。通常為緩存對象的類名(非嚴格标準)。
maxElementsInMemory:設定基于記憶體的緩存可存放對象的最大數目。
maxElementsOnDisk:設定基于硬碟的緩存可存放對象的最大數目。
eternal:如果為true,表示對象永遠不會過期,此時會忽略timeToIdleSeconds和timeToLiveSeconds屬性,預設為false;
timeToIdleSeconds: 設定允許對象處于空閑狀态的最長時間,以秒為機關。當對象自從最近一次被通路後,如果處于空閑狀态的時間超過了timeToIdleSeconds屬性值,這個對象就會過期。當對象過期,EHCache将把它從緩存中清空。隻有當eternal屬性為false,該屬性才有效。如果該屬性值為0,則表示對象可以無限期地處于空閑狀态。
timeToLiveSeconds:設定對象允許存在于緩存中的最長時間,以秒為機關。當對象自從被存放到緩存中後,如果處于緩存中的時間超過了 timeToLiveSeconds屬性值,這個對象就會過期。當對象過期,EHCache将把它從緩存中清除。隻有當eternal屬性為false,該屬性才有效。如果該屬性值為0,則表示對象可以無限期地存在于緩存中。timeToLiveSeconds必須大于timeToIdleSeconds屬性,才有意義。
overflowToDisk:如果為true,表示當基于記憶體的緩存中的對象數目達到了maxElementsInMemory界限後,會把益出的對象寫到基于硬碟的緩存中。注意:如果緩存的對象要寫入到硬碟中的話,則該對象必須實作了Serializable接口才行。
memoryStoreEvictionPolicy:緩存對象清除政策。有三種:
1 FIFO ,first in first out ,這個是大家最熟的,先進先出,不多講了
2 LFU , Less Frequently Used ,就是上面例子中使用的政策,直白一點就是講一直以來最少被使用的。如上面所講,緩存的元素有一個hit 屬性,hit 值最小的将會被清出緩存。
2 LRU ,Least Recently Used ,最近最少使用的,緩存的元素有一個時間戳,當緩存容量滿了,而又需要騰出地方來緩存新的元素的時候,那麼現有緩存元素中時間戳離目前時間最遠的元素将被清出緩存。
四、單獨使用EHCache
1.建立CacheManager (net.sf.ehcache.CacheManager)
(1)使用預設配置檔案建立
| |
(2)使用指定配置檔案建立
| |
(3)從classpath找尋配置檔案并建立
| |
| |
(4)通過輸入流建立
| |
| |
| |
| |
| |
| |
2.建立Caches (net.sf.ehcache.Cache)
(1)取得配置檔案中預先 定義的sampleCache1設定,生成一個Cache
| |
(2)設定一個名為test 的新cache,test屬性為預設
| |
| |
(3)設定一個名為test 的新cache,并定義其屬性
| |
| |
| |
(4)删除cache
| |
| |
3.使用Caches
(1)往cache中加入元素
| |
| |
(2)從cache中取得元素
| |
(3)從cache中删除元素
| |
| |
| |
4.解除安裝CacheManager ,關閉Cache
| |
下附代碼。
五、在 Hibernate 中運用EHCache
1、hibernate.cfg.xml中需設定如下:
3系列版本加入
| |
| |
| |
EhCacheProvider類位于hibernate3.jar
2.1版本加入
net.sf.ehcache.hibernate.Provider
2.1以下版本加入
net.sf.hibernate.cache.EhCache
2、在Hibernate3.x中的etc目錄下有ehcache.xml的示範檔案,将其複制應用程式的src目錄下(編譯時會把ehcache.xml複制到WEB-INF/classess目錄下),對其中的相關值進行更改以和自己的程式相适合。
3、持久化類的映射檔案進行配置
| |
在<set>标記中設定了<cache usage="read-write"/>,但Hibernate僅把和Group相關的Student的主鍵id加入到緩存中,如果希望把整個Student的散裝屬性都加入到二級緩存中,還需要在Student.hbm.xml檔案的<class>标記中加入<cache>子标記,如下所示:
| |
注:SSH中hibernate配置的cache資訊
| |