EhCache介紹

http://chenjumin.iteye.com/blog/684926


ehcache是一個非常輕量級的緩存實現,而且從1.2之後就支持了集羣,而且是hibernate默認的緩存provider。EhCache 是一個純Java的進程內緩存框架,具有快速、精幹等特點,是Hibernate中默認的CacheProvider。

 

Ehcache的分佈式緩存有傳統的RMI,1.5版的JGroups,1.6版的JMS。分佈式緩存主要解決集羣環境中不同的服務器間的數據的同步問題。

 

使用Spring的AOP進行整合,可以靈活的對方法的返回結果對象進行緩存。

 

CachingFilter功能可以對HTTP響應的內容進行緩存。

 

1、主要特性
     1. 快速.
     2. 簡單.
     3. 多種緩存策略
     4. 緩存數據有兩級:內存和磁盤,因此無需擔心容量問題
     5. 緩存數據會在虛擬機重啓的過程中寫入磁盤
     6. 可以通過RMI、可插入API等方式進行分佈式緩存
     7. 具有緩存和緩存管理器的偵聽接口
     8. 支持多緩存管理器實例,以及一個實例的多個緩存區域
     9. 提供Hibernate的緩存實現
     10. 等等

 

2、配置文件介紹(普通緩存) 

Xml代碼  收藏代碼
  1. <ehcache>  
  2.     <!-- 指定一個文件目錄,當EHCache把數據寫到硬盤上時,將把數據寫到這個文件目錄下 -->  
  3.     <diskStore path="java.io.tmpdir"/>  
  4.   
  5.     <!-- 設定緩存的默認數據過期策略 -->  
  6.     <defaultCache  
  7.             maxElementsInMemory="10000"  
  8.             eternal="false"  
  9.             overflowToDisk="true"  
  10.             timeToIdleSeconds="0"  
  11.             timeToLiveSeconds="0"  
  12.             diskPersistent="false"  
  13.             diskExpiryThreadIntervalSeconds="120"/>  
  14.       
  15.     <!--    
  16.         設定具體的命名緩存的數據過期策略  
  17.   
  18.         cache元素的屬性:  
  19.             name:緩存名稱  
  20.               
  21.             maxElementsInMemory:內存中最大緩存對象數  
  22.               
  23.             maxElementsOnDisk:硬盤中最大緩存對象數,若是0表示無窮大  
  24.               
  25.             eternal:true表示對象永不過期,此時會忽略timeToIdleSeconds和timeToLiveSeconds屬性,默認爲false  
  26.               
  27.             overflowToDisk:true表示當內存緩存的對象數目達到了maxElementsInMemory界限後,會把溢出的對象寫到硬盤緩存中。注意:如果緩存的對象要寫入到硬盤中的話,則該對象必須實現了Serializable接口才行。  
  28.               
  29.             diskSpoolBufferSizeMB:磁盤緩存區大小,默認爲30MB。每個Cache都應該有自己的一個緩存區。  
  30.               
  31.             diskPersistent:是否緩存虛擬機重啓期數據  
  32.               
  33.             diskExpiryThreadIntervalSeconds:磁盤失效線程運行時間間隔,默認爲120秒  
  34.   
  35.             timeToIdleSeconds: 設定允許對象處於空閒狀態的最長時間,以秒爲單位。當對象自從最近一次被訪問後,如果處於空閒狀態的時間超過了timeToIdleSeconds屬性值,這個對象就會過期,EHCache將把它從緩存中清空。只有當eternal屬性爲false,該屬性纔有效。如果該屬性值爲0,則表示對象可以無限期地處於空閒狀態  
  36.               
  37.             timeToLiveSeconds:設定對象允許存在於緩存中的最長時間,以秒爲單位。當對象自從被存放到緩存中後,如果處於緩存中的時間超過了 timeToLiveSeconds屬性值,這個對象就會過期,EHCache將把它從緩存中清除。只有當eternal屬性爲false,該屬性纔有效。如果該屬性值爲0,則表示對象可以無限期地存在於緩存中。timeToLiveSeconds必須大於timeToIdleSeconds屬性,纔有意義  
  38.   
  39.             memoryStoreEvictionPolicy:當達到maxElementsInMemory限制時,Ehcache將會根據指定的策略去清理內存。可選策略有:LRU(最近最少使用,默認策略)、FIFO(先進先出)、LFU(最少訪問次數)。  
  40.     -->  
  41.     <cache name="CACHE1"  
  42.            maxElementsInMemory="1000"  
  43.            eternal="true"  
  44.            overflowToDisk="true"/>    
  45.              
  46.     <cache name="CACHE2"  
  47.         maxElementsInMemory="1000"  
  48.         eternal="false"  
  49.         timeToIdleSeconds="200"  
  50.         timeToLiveSeconds="4000"  
  51.         overflowToDisk="true"/>  
  52. </ehcache>  

 

3、配置文件介紹(分佈式緩存) 

     1)RMI集羣模式

          A、手工發現

               需要指定節點發現模式peerDiscovery值爲manual,rmiUrls設置爲另一臺服務器的IP、端口和緩存名等信息。

Xml代碼  收藏代碼
  1. <cacheManagerPeerProviderFactory   
  2.     class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"   
  3.     properties="peerDiscovery=manual,  
  4.     rmiUrls=//192.168.0.12:4567/oschina_cache|//192.168.0.13:4567/oschina_cache"  
  5. />  

  

          B、自動發現

                需要指定節點發現模式peerDiscovery值爲automatic自動,同時組播地址可以指定D類IP地址空間,範圍從 224.0.1.0 到 238.255.255.255 中的任何一個地址。

Xml代碼  收藏代碼
  1. <cacheManagerPeerProviderFactory  
  2.     class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"  
  3.     properties="peerDiscovery=automaticmulticastGroupAddress=230.0.0.1,  
  4.     multicastGroupPort=4446timeToLive=32"  
  5. />  

 

           需要在每個cache屬性中加入
<cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>

Xml代碼  收藏代碼
  1. <cache name="demoCache"  
  2.     maxElementsInMemory="10000"  
  3.     eternal="true"  
  4.     overflowToDisk="true">  
  5.     <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>  
  6. </cache>   

         

4、通過編程方式使用EhCache

Java代碼  收藏代碼
  1. //從classes目錄查找ehcache.xml配置文件  
  2. CacheManager cacheManager = CacheManager.getInstance();  
  3.   
  4. //從classes目錄查找指定名稱的配置文件  
  5. //CacheManager cacheManager = CacheManager.create(getClass().getResource("/ehcache.xml"));  
  6.   
  7. //根據配置文件獲得Cache實例  
  8. Cache cache = cacheManager.getCache("CACHE1");  
  9.   
  10. //清空Cache中的所有元素  
  11. cache.removeAll();  
  12.   
  13. //往Cache中添加元素  
  14. cache.put(new Element("s1""11111"));  
  15. cache.put(new Element("s2""22222"));  
  16. cache.put(new Element("s3""33333"));  
  17.   
  18. //從Cache中取得元素  
  19. Element e = cache.get("s3");  
  20. System.out.println(e.getValue());  
  21.   
  22. //卸載緩存管理器  
  23. cacheManager.shutdown();  

 

5、頁面緩存

     在web.xml文件中配置過濾器。此處對test_tag.jsp頁面進行緩存。

Xml代碼  收藏代碼
  1. <filter>   
  2.     <filter-name>testPageCachingFilter</filter-name>   
  3.     <filter-class>net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter</filter-class>   
  4. </filter>  
  5. <filter-mapping>   
  6.     <filter-name>testPageCachingFilter</filter-name>   
  7.     <url-pattern>/test_tag.jsp</url-pattern>  
  8. </filter-mapping>  

  

    在ehcache.xml文件中配置Cache節點。注意:cache的name屬性必需爲SimplePageCachingFilter。

Xml代碼  收藏代碼
  1. <cache name="SimplePageCachingFilter"   
  2.    maxElementsInMemory="10"   
  3.    overflowToDisk="true"   
  4.    eternal="false"   
  5.    timeToIdleSeconds="100"   
  6.    timeToLiveSeconds="100"  
  7.    memoryStoreEvictionPolicy="LFU" />  

 


發佈了104 篇原創文章 · 獲贊 13 · 訪問量 86萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章