Ehcache簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
使用Spring的AOP進(jìn)行整合,可以靈活的對(duì)方法的返回結(jié)果對(duì)象進(jìn)行緩存。
CachingFilter功能可以對(duì)HTTP響應(yīng)的內(nèi)容進(jìn)行緩存。
1、主要特性
1. 快速.
2. 簡(jiǎn)單.
3. 多種緩存策略
4. 緩存數(shù)據(jù)有兩級(jí):內(nèi)存和磁盤,因此無(wú)需擔(dān)心容量問(wèn)題
5. 緩存數(shù)據(jù)會(huì)在虛擬機(jī)重啟的過(guò)程中寫入磁盤
6. 可以通過(guò)RMI、可插入API等方式進(jìn)行分布式緩存
7. 具有緩存和緩存管理器的偵聽接口
8. 支持多緩存管理器實(shí)例,以及一個(gè)實(shí)例的多個(gè)緩存區(qū)域
9. 提供Hibernate的緩存實(shí)現(xiàn)
10. 等等
2、配置文件介紹(普通緩存)
<ehcache> <!-- 指定一個(gè)文件目錄,當(dāng)EHCache把數(shù)據(jù)寫到硬盤上時(shí),將把數(shù)據(jù)寫到這個(gè)文件目錄下 --> <diskStore path="java.io.tmpdir"/> <!-- 設(shè)定緩存的默認(rèn)數(shù)據(jù)過(guò)期策略 --> <defaultCache maxElementsInMemory="10000" eternal="false" overflowToDisk="true" timeToIdleSeconds="0" timeToLiveSeconds="0" diskPersistent="false" diskExpiryThreadIntervalSeconds="120"/> <!-- 設(shè)定具體的命名緩存的數(shù)據(jù)過(guò)期策略 cache元素的屬性: name:緩存名稱 maxElementsInMemory:內(nèi)存中最大緩存對(duì)象數(shù) maxElementsOnDisk:硬盤中最大緩存對(duì)象數(shù),若是0表示無(wú)窮大 eternal:true表示對(duì)象永不過(guò)期,此時(shí)會(huì)忽略timeToIdleSeconds和timeToLiveSeconds屬性,默認(rèn)為false overflowToDisk:true表示當(dāng)內(nèi)存緩存的對(duì)象數(shù)目達(dá)到了maxElementsInMemory界限后,會(huì)把溢出的對(duì)象寫到硬盤緩存中。注意:如果緩存的對(duì)象要寫入到硬盤中的話,則該對(duì)象必須實(shí)現(xiàn)了Serializable接口才行。 diskSpoolBufferSizeMB:磁盤緩存區(qū)大小,默認(rèn)為30MB。每個(gè)Cache都應(yīng)該有自己的一個(gè)緩存區(qū)。 diskPersistent:是否緩存虛擬機(jī)重啟期數(shù)據(jù) diskExpiryThreadIntervalSeconds:磁盤失效線程運(yùn)行時(shí)間間隔,默認(rèn)為120秒 timeToIdleSeconds: 設(shè)定允許對(duì)象處于空閑狀態(tài)的最長(zhǎng)時(shí)間,以秒為單位。當(dāng)對(duì)象自從最近一次被訪問(wèn)后,如果處于空閑狀態(tài)的時(shí)間超過(guò)了timeToIdleSeconds屬性值,這個(gè)對(duì)象就會(huì)過(guò)期,EHCache將把它從緩存中清空。只有當(dāng)eternal屬性為false,該屬性才有效。如果該屬性值為0,則表示對(duì)象可以無(wú)限期地處于空閑狀態(tài) timeToLiveSeconds:設(shè)定對(duì)象允許存在于緩存中的最長(zhǎng)時(shí)間,以秒為單位。當(dāng)對(duì)象自從被存放到緩存中后,如果處于緩存中的時(shí)間超過(guò)了 timeToLiveSeconds屬性值,這個(gè)對(duì)象就會(huì)過(guò)期,EHCache將把它從緩存中清除。只有當(dāng)eternal屬性為false,該屬性才有效。如果該屬性值為0,則表示對(duì)象可以無(wú)限期地存在于緩存中。timeToLiveSeconds必須大于timeToIdleSeconds屬性,才有意義 memoryStoreEvictionPolicy:當(dāng)達(dá)到maxElementsInMemory限制時(shí),Ehcache將會(huì)根據(jù)指定的策略去清理內(nèi)存。可選策略有:LRU(最近最少使用,默認(rèn)策略)、FIFO(先進(jìn)先出)、LFU(最少訪問(wèn)次數(shù))。 --> <cache name="CACHE1" maxElementsInMemory="1000" eternal="true" overflowToDisk="true"/> <cache name="CACHE2" maxElementsInMemory="1000" eternal="false" timeToIdleSeconds="200" timeToLiveSeconds="4000" overflowToDisk="true"/> </ehcache>
3、配置文件介紹(分布式緩存)
1)RMI集群模式
A、手工發(fā)現(xiàn)
需要指定節(jié)點(diǎn)發(fā)現(xiàn)模式peerDiscovery值為manual,rmiUrls設(shè)置為另一臺(tái)服務(wù)器的IP、端口和緩存名等信息。
<cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" properties="peerDiscovery=manual, rmiUrls=//192.168.0.12:4567/bjpowernode_cache|//192.168.0.13:4567/bjpowernode_cache" />
B、自動(dòng)發(fā)現(xiàn)
需要指定節(jié)點(diǎn)發(fā)現(xiàn)模式peerDiscovery值為automatic自動(dòng),同時(shí)組播地址可以指定D類IP地址空間,范圍從 224.0.1.0 到 238.255.255.255 中的任何一個(gè)地址。
<cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1, multicastGroupPort=4446, timeToLive=32" />
需要在每個(gè)cache屬性中加入
<cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/> <cache name="demoCache" maxElementsInMemory="10000" eternal="true" overflowToDisk="true"> <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/> </cache>
4、通過(guò)編程方式使用EhCache
//從classes目錄查找ehcache.xml配置文件 CacheManager cacheManager = CacheManager.getInstance(); //從classes目錄查找指定名稱的配置文件 //CacheManager cacheManager = CacheManager.create(getClass().getResource("/ehcache.xml")); //根據(jù)配置文件獲得Cache實(shí)例 Cache cache = cacheManager.getCache("CACHE1"); //清空Cache中的所有元素 cache.removeAll(); //往Cache中添加元素 cache.put(new Element("s1", "11111")); cache.put(new Element("s2", "22222")); cache.put(new Element("s3", "33333")); //從Cache中取得元素 Element e = cache.get("s3"); System.out.println(e.getValue()); //卸載緩存管理器 cacheManager.shutdown();
5、頁(yè)面緩存
在web.xml文件中配置過(guò)濾器。此處對(duì)test_tag.jsp頁(yè)面進(jìn)行緩存。
<filter> <filter-name>testPageCachingFilter</filter-name> <filter-class>net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter</filter-class> </filter> <filter-mapping> <filter-name>testPageCachingFilter</filter-name> <url-pattern>/test_tag.jsp</url-pattern> </filter-mapping>
在ehcache.xml文件中配置Cache節(jié)點(diǎn)。注意:cache的name屬性必需為SimplePageCachingFilter。
<cache name="SimplePageCachingFilter" maxElementsInMemory="10" overflowToDisk="true" eternal="false" timeToIdleSeconds="100" timeToLiveSeconds="100" memoryStoreEvictionPolicy="LFU" />
相關(guān)文章
Struts2學(xué)習(xí)手冊(cè)之文件上傳基礎(chǔ)教程
Struts2提供的文件上傳下載機(jī)制十分簡(jiǎn)便,使得我們寫很少的代碼,下面這篇文章主要給大家介紹了關(guān)于Struts2學(xué)習(xí)手冊(cè)之文件上傳的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-05-05Java獲取當(dāng)前時(shí)間的時(shí)間戳方法總結(jié)
Java中獲取時(shí)間戳的方式有很多種,下面這篇文章主要給大家介紹了關(guān)于Java獲取當(dāng)前時(shí)間的時(shí)間戳的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-06-06java 設(shè)計(jì)模式之State(狀態(tài)模式)
這篇文章主要介紹了java 設(shè)計(jì)模式之State(狀態(tài)模式)的相關(guān)資料,一個(gè)類的行為基于它的狀態(tài)的改變而改變。狀態(tài)模式歸屬于行為型模式,需要的朋友可以參考下2017-08-08MyBatis 中使用 Mapper 簡(jiǎn)化代碼的方法
這篇文章主要介紹了MyBatis 中使用 Mapper 簡(jiǎn)化代碼的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01Java之SpringBoot集成ActiveMQ消息中間件案例講解
這篇文章主要介紹了Java之SpringBoot集成ActiveMQ消息中間件案例講解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07詳解Java數(shù)組擴(kuò)容縮容與拷貝的實(shí)現(xiàn)和原理
這篇文章主要帶大家學(xué)習(xí)數(shù)組的擴(kuò)容、縮容及拷貝,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05