生活随笔
收集整理的這篇文章主要介紹了
ehcache缓存的详细配置
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
用到緩存,主要是用來解決并發問題的。
?
其中ehcache是一個純Java的過程中緩存實現Hibernate2.1,Spring都支持EHcache嵌入。
?
本文主要寫Spring中引入ehcache而不是用hibernate.
?
ehcache部署起來很簡單,主要分兩步:
?
1.首先要給他寫個核心配置XML文件
?
Xml代碼??
<ehcache>????????????????????<diskStore?path="java.io.tmpdir"/>????????????????????<defaultCache??????????????????????????maxElementsInMemory="10000"??????????????????????????eternal="false"??????????????????????????timeToIdleSeconds="120"??????????????????????????timeToLiveSeconds="120"??????????????????????????overflowToDisk="true"??????????????????????????diskPersistent="false"??????????????????????????diskExpiryThreadIntervalSeconds="120"??????????????????????????memoryStoreEvictionPolicy="LRU"??????????????????????????/>????????????????????<cache?name="cache1"?????????????????????????maxElementsInMemory="10000"?????????????????????????eternal="false"??????maxElementsOnDisk="1000"?????????????????????????overflowToDisk="true"?????????????????????????timeToIdleSeconds="300"?????????????????????????timeToLiveSeconds="600"?????????????????????????memoryStoreEvictionPolicy="LFU"??????????????????????????/>????????????????????????????????????????</ehcache>??
?
?
屬性解釋:
?
簡單配置,在ehcache.xml文件中有此配置,在使用Ehcache前最好將其刪除掉,自己配置。
?
緩存名cache1,內存中最多可緩存10000個Element,其中的element會在閑置5分鐘或是存活10分鐘之后失效。
?
超過10000element時,element將會輸出到磁盤中,輸出路徑是java.io.tmpdir。
?
?
從其他文章找到其詳細解釋:
?
·?? Cache配置
?
·?????????? name:Cache的唯一標識
·?????????? maxElementsInMemory:內存中最大緩存對象數。
·?????????? maxElementsOnDisk:磁盤中最大緩存對象數,若是0表示無窮大。
·?????????? eternal:Element是否永久有效,一但設置了,timeout將不起作用。
·?????????? overflowToDisk:配置此屬性,當內存中Element數量達到maxElementsInMemory時,Ehcache將會Element寫到磁盤中。
·?????????? timeToIdleSeconds:設置Element在失效前的允許閑置時間。僅當element不是永久有效時使用,可選屬性,默認值是0,也就是可閑置時間無窮大。
·?????????? timeToLiveSeconds:設置Element在失效前允許存活時間。最大時間介于創建時間和失效時間之間。僅當element不是永久有效時使用,默認是0.,也就是element存活時間無窮大。
·?????????? diskPersistent:是否緩存虛擬機重啟期數據。(這個虛擬機是指什么虛擬機一直沒看明白是什么,有高人還希望能指點一二)。
·?????????? diskExpiryThreadIntervalSeconds:磁盤失效線程運行時間間隔,默認是120秒。
·?????????? diskSpoolBufferSizeMB:這個參數設置DiskStore(磁盤緩存)的緩存區大小。默認是30MB。每個Cache都應該有自己的一個緩沖區。
·?????????? memoryStoreEvictionPolicy:當達到maxElementsInMemory限制時,Ehcache將會根據指定的策略去清理內存。默認策略是LRU(最近最少使用)。你可以設置為FIFO(先進先出)或是LFU(較少使用)。這里比較遺憾,Ehcache并沒有提供一個用戶定制策略的接口,僅僅支持三種指定策略,感覺做的不夠理想。
?
?
2.實際要緩存的類調用
?
寫一個實例類,這樣大家就明白差不多了:
?
Java代碼??
import?java.io.Serializable;???????????import?net.sf.ehcache.Cache;?????????import?net.sf.ehcache.CacheManager;?????????import?net.sf.ehcache.Element;???????????public?class?Demo?{??????????????????????????static?CacheManager?manager=?new?CacheManager();???????????????/**?????????????*##############################################################################?????????????*??????????????*?@DESCRIBE?????????????????*?@param?args?????????????*?@throws?InterruptedException?????????????*??????????????????????????????????????*##############################################################################?????????????*/?????????????public?static?void?main(String[]?args)?throws?InterruptedException?{??????????????????????????????????String[]?cacheNames?=?manager.getCacheNames();?????????????????System.out.println("讀取的緩存列表為:");?????????????????for(int?i=0;i<cacheNames.length;i++){??????????????????????System.out.println("--?"+(i+1)+"?"+cacheNames[i]);?????????????????}??????????????????????????????????Cache?cache?=?manager.getCache("cache1");?????????????????Element?element?=?new?Element("key1",?"value1");?????????????????cache.put(element);??????????????????????????????????element?=?cache.get("key1");?????????????????Serializable?value?=?element.getValue();?????????????????System.out.println("序列化后的值為:"+value.toString());???????????????????element?=?cache.get("key1");?????????????????Object?value1?=?element.getObjectValue();?????????????????System.out.println("未序列化的值為:"+value1.toString());??????????????????????????????????int?elementsInMemory?=?cache.getSize();?????????????????System.out.println("得到緩存的對象數量:"+elementsInMemory);??????????????????????????????????long?elementsInMemory1?=?cache.getMemoryStoreSize();?????????????????System.out.println("得到緩存對象占用內存的數量:"+elementsInMemory1);??????????????????????????????????long?elementsInMemory2?=?cache.getDiskStoreSize();?????????????????System.out.println("得到緩存對對象占用磁盤的數量:"+elementsInMemory2);??????????????????????????????????????????int?hits?=?cache.getHitCount();?????????????????System.out.println("得到緩存讀取的命中次數:"+hits);??????????????????????????????????????????int?hits1?=?cache.getMemoryStoreHitCount();?????????????????System.out.println("得到內存中緩存讀取的命中次數:"+hits1);??????????????????????????????????????????int?hits2?=cache.getDiskStoreHitCount();?????????????????System.out.println("得到磁盤中緩存讀取的命中次數:"+hits2);??????????????????????????????????????????int?hits3?=?cache.getMissCountNotFound();?????????????????System.out.println("得到緩存讀取的丟失次數:"+hits3);??????????????????????????????????????????int?hits4?=?cache.getMissCountExpired();?????????????????System.out.println("得到緩存讀取的已經被銷毀的對象丟失次數:"+hits4);?????????????????}???????????}??
?
?
?
另:附件里需要的ehcache.jar包
總結
以上是生活随笔為你收集整理的ehcache缓存的详细配置的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。