您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何使用Ehcache”,在日常操作中,相信很多人在如何使用Ehcache問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”如何使用Ehcache”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
EhCache 是一個(gè)純Java的進(jìn)程內(nèi)緩存框架,具有快速、精干等特點(diǎn),是Hibernate中默認(rèn)的CacheProvider。
/** * 等價(jià)于 * <cache alias="preConfigured"> * <key-type>java.lang.Long</key-type> * <value-type>java.lang.String</value-type> * <resources> * <heap unit="entries">200</heap> * </resources> * </cache> * @author luther * @time 2019年7月12日 上午10:33:22 */ @Test public void testHelloWorld() { CacheConfiguration<Long, String> cacheConfiguration = CacheConfigurationBuilder .newCacheConfigurationBuilder(long.class, String.class, ResourcePoolsBuilder.heap(100)).build(); CacheManagerBuilder<CacheManager> cacheManagerBuilder = CacheManagerBuilder.newCacheManagerBuilder(); // 將CacheManager名定義為preConfigured cacheManagerBuilder.withCache("preConfigured", cacheConfiguration); // 創(chuàng)建CacheManager實(shí)例 CacheManager cacheManager = cacheManagerBuilder.build(); // 初始化CacheManager實(shí)例 cacheManager.init(); // 在CacheManager中創(chuàng)建名為myCache的緩存對(duì)象 Cache<Long, String> myCache = cacheManager.createCache("myCache", CacheConfigurationBuilder .newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.heap(1)).build()); // 往myCache緩存中放入鍵為1L,值為da one!的條目 myCache.put(1L, "da one!"); // 通過(guò)鍵獲取值 String value = myCache.get(1L); // 展示值 System.out.println(value); // 移除preConfigured緩存管理器 cacheManager.removeCache("preConfigured"); // 關(guān)閉緩存 cacheManager.close(); }
/** * 演示加載xml配置 * @author luther * @time 2019年7月12日 上午10:57:27 */ @Test public void testXml() { XmlConfiguration xmlConfig = new XmlConfiguration(Thread.currentThread() .getContextClassLoader().getResource("ehcache3.xml")); CacheManager cacheManager = CacheManagerBuilder.newCacheManager(xmlConfig); cacheManager.init(); // 在CacheManager中創(chuàng)建名為myCache的緩存對(duì)象 Cache<Long, String> myCache = cacheManager.createCache("myCache", CacheConfigurationBuilder .newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.heap(1)).build()); // 往myCache緩存中放入鍵為1L,值為da one!的條目 myCache.put(1L, "da one!"); // 通過(guò)鍵獲取值 String value = myCache.get(1L); // 展示值 System.out.println(value); // 移除preConfigured緩存管理器 cacheManager.removeCache("preConfigured"); // 關(guān)閉緩存 cacheManager.close(); }
配置文件如下:
<?xml version="1.0" encoding="UTF-8"?> <config xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://www.ehcache.org/v3' xsi:schemaLocation="http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core.xsd"> <cache alias="preConfigured"> <key-type>java.lang.Long</key-type> <value-type>java.lang.String</value-type> <resources> <heap unit="entries">200</heap> </resources> </cache> </config>
EhCache分2和3版本,而2版本和3版本的XML配置文件有所出入。
其中2版本的配置如下:
<?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://www.ehcache.org/v32' xsi:schemaLocation="http://www.ehcache.org/v2 http://ehcache.org/ehcache.xsd"> <!-- 指定數(shù)據(jù)保存在硬盤的地址 --> <diskStore path="java.io.tmpdir"/> <!-- 可配置路徑有: user.home(用戶的家目錄) user.dir(用戶當(dāng)前的工作目錄) java.io.tmpdir(默認(rèn)的臨時(shí)目錄) ehcache.disk.store.dir(ehcache的配置目錄) 絕對(duì)路徑(如:d:\\ehcache) --> <!-- 指定默認(rèn)使用的cache --> <defaultCache <!-- 清理保存在磁盤上的過(guò)期緩存項(xiàng)目的線程的啟動(dòng)時(shí)間間隔,默認(rèn)120秒。 --> diskExpiryThreadIntervalSeconds="120" <!-- 設(shè)置元素不永遠(yuǎn)存儲(chǔ) --> eternal="false" <!-- 磁盤中的最大對(duì)象數(shù),默認(rèn)為0不限制 --> maxEntriesLocalDisk="0" <!-- 設(shè)置緩存在本地內(nèi)存中最大緩存項(xiàng)數(shù)量,0沒(méi)有限制 --> maxEntriesLocalHeap="0" <!-- 內(nèi)存回收策略(當(dāng)緩存項(xiàng)達(dá)到maxEntriesLocalHeap限制時(shí),剔除緩存項(xiàng)的策略), 默認(rèn)回收策略是:LRU最近最少使用Least Recently Used, 其他策略有:先進(jìn)先出First In First Out,Less Frequently Used使用頻率最低 --> memoryStoreEvictionPolicy="LRU" <!-- 設(shè)置活動(dòng)過(guò)期時(shí)間為1小時(shí) --> timeToIdleSeconds="3600" <!-- 設(shè)置過(guò)期時(shí)間為永久 --> timeToLiveSeconds="0" <!-- 是否保存至硬盤 --> overflowToDisk="false" <!-- 當(dāng)緩存項(xiàng)被讀出時(shí),是否返回一份它的拷貝(返回對(duì)象是緩存中對(duì)象的拷貝)。默認(rèn)fasle。 --> copyOnRead="true" <!-- 當(dāng)緩存項(xiàng)被寫入時(shí),是否寫入一份它的拷貝(寫入緩存的是寫入對(duì)象的拷貝)。默認(rèn)false --> copyOnWrite="true" <!-- 是否收集統(tǒng)計(jì)信息,默認(rèn)為false,不收集 --> statistics="true"> <!-- 指定拷貝的策略 --> <copyStrategy class="net.sf.ehcache.store.compound.ReadWriteSerializationCopyStrategy"/> <!-- 指定持久化策略 --> <persistence strategy="none"></persistence> <!-- 可配置strategy有: localRestartable(復(fù)制所有緩存項(xiàng)到硬盤,僅適用于企業(yè)ehcache用戶) ocalTempSwap(當(dāng)緩存空間滿時(shí),緩存到硬盤) none(不緩存到硬盤) distributed(需要在配置terracotta的情況下使用,不適用于單實(shí)例) --> </defaultCache> </ehcache>
如果覺(jué)的不夠詳細(xì),可以參考官方給的2版本的XML詳解
3版本為:
<?xml version="1.0" encoding="UTF-8"?> <config xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://www.ehcache.org/v3' xsi:schemaLocation="http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core.xsd"> <!-- cache配置模板,可以通過(guò)uses-template被其它配置繼承 --> <cache-template name="template"> <!-- 指定鍵的類型,默認(rèn)為java.lang.Object serializer:定義序列化的方式 copier:定義用于復(fù)制類型實(shí)例的協(xié)定 --> <key-type serializer="org.ehcache.impl.serialization.PlainJavaSerializer" copier="org.ehcache.impl.copy.SerializingCopier">java.lang.String</key-type> <!-- 指定值的類型,默認(rèn)為java.lang.Object --> <value-type>java.lang.String</value-type> <!-- 定義過(guò)期失效機(jī)制 --> <expiry> <!-- 自定義的時(shí)間過(guò)期類全路徑名,需要實(shí)現(xiàn)ExpiryPolicy接口 --> <class>com.luther.expiryPolicy.MyExpiryPolicy</class> <!-- 意味著緩存內(nèi)容不會(huì)過(guò)期 --> <none /> <!-- TimeToIdleExpiryPolicy用于設(shè)置對(duì)象在cache中的最大閑置時(shí)間(訪問(wèn)該對(duì)象時(shí)間就會(huì)重置) --> <tti>3600</tti> <!-- TimeToLiveExpiryPolicy用于設(shè)置對(duì)象在cache中的最大存活時(shí)間(不管有沒(méi)有訪問(wèn),到時(shí)即失效) --> <ttl>0</ttl> </expiry> <resources> <!-- 硬盤 --> <disk persistent="true" unit="MB">20</disk> <!-- 堆 --> <heap unit="entries">200</heap> <!-- 非堆 --> <offheap unit="MB" xsi:type="memory-type"></offheap> </resources> </cache-template> </config>
到此,關(guān)于“如何使用Ehcache”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。