缓存之EHCache
轉載自?http://blog.csdn.net/l271640625/article/details/20528573
一、簡介
非常簡單,而且易用。
????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)使用默認配置文件創建
| 1 | CacheManager?manager?=?CacheManager.create(); |
(2)使用指定配置文件創建
| 1 | CacheManager?manager?=?CacheManager.create("src/config/ehcache.xml"); |
(3)從classpath找尋配置文件并創建
| 1 | URL?url?=?getClass().getResource("/anothername.xml"); |
| 2 | CacheManager?manager?=?CacheManager.create(url); |
(4)通過輸入流創建
| 1 | InputStream?fis?=?new?FileInputStream(new?File("src/config/ehcache.xml").getAbsolutePath()); |
| 2 | try?{? |
| 3 | ????manager?=?CacheManager.create(fis); |
| 4 | ?}?finally?{? |
| 5 | ????fis.close();? |
| 6 | } |
2.創建Caches (net.sf.ehcache.Cache)
(1)取得配置文件中預先 定義的sampleCache1設置,生成一個Cache
| 1 | Cache?cache?=?manager.getCache("sampleCache1"); |
(2)設置一個名為test 的新cache,test屬性為默認
| 1 | CacheManager?manager?=?CacheManager.create(); |
| 2 | manager.addCache("test"); |
(3)設置一個名為test 的新cache,并定義其屬性
| 1 | CacheManager?manager?=?CacheManager.create(); |
| 2 | Cache?cache?=?new?Cache("test",?1,?true,?false,?5,?2); |
| 3 | manager.addCache(cache); |
(4)刪除cache
| 1 | CacheManager?singletonManager?=?CacheManager.create(); |
| 2 | singletonManager.removeCache("sampleCache1"); |
3.使用Caches
(1)往cache中加入元素
| 1 | Element?element?=?new?Element("key1",?"value1"); |
| 2 | cache.put(new?Element(element); |
(2)從cache中取得元素
| 1 | Element?element?=?cache.get("key1"); |
(3)從cache中刪除元素
| 1 | Cache?cache?=?manager.getCache("sampleCache1"); |
| 2 | Element?element?=?new?Element("key1",?"value1"); |
| 3 | cache.remove("key1"); |
4.卸載CacheManager ,關閉Cache
| 1 | ?manager.shutdown(); |
下附代碼。
五、在 Hibernate 中運用EHCache
1、hibernate.cfg.xml中需設置如下:
3系列版本加入
| 1 | <property?name=”?hibernate.cache.provider_class”> |
| 2 | ????org.hibernate.cache.EhCacheProvider |
| 3 | </property> |
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、持久化類的映射文件進行配置
| 1 | <cache?usage="read-write"/> |
在<set>標記中設置了<cache usage="read-write"/>,但Hibernate僅把和Group相關的Student的主鍵id加入到緩存中,如果希望把整個Student的散裝屬性都加入到二級緩存中,還需要在Student.hbm.xml文件的<class>標記中加入<cache>子標記,如下所示:
| 1 | <cache?usage="read-write"?/>?<!--cache標記需跟在class標記后--> |
?注:SSH中hibernate配置的cache信息
| 1 | <prop?key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop> |
總結
以上是生活随笔為你收集整理的缓存之EHCache的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Flink专题-BaseTransfor
- 下一篇: 缓存之EHCache(二)