溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用Ehcache

發(fā)布時(shí)間:2021-11-16 15:07:54 來(lái)源:億速云 閱讀:182 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹“如何使用Ehcache”,在日常操作中,相信很多人在如何使用Ehcache問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”如何使用Ehcache”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

一、簡(jiǎn)介

EhCache 是一個(gè)純Java的進(jìn)程內(nèi)緩存框架,具有快速、精干等特點(diǎn),是Hibernate中默認(rèn)的CacheProvider。

二、簡(jiǎn)單使用(以3版本為例)

1、編程式

/**
 *  等價(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(); 
}

2、xml配置方式

/**
 * 演示加載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í)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI