Ehcache3配置方式與Ehcache2的配置方式區(qū)別很大!
緩存管理器只有全局狀態(tài)下其他地方才能根據(jù)名稱拿到緩存,也就是只有保證在同一個(gè)緩存管理器下才能拿到指定緩存
兩種配置方式可同時(shí)使用
xml配置方式
<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">
<!-- http://www.ehcache.org/documentation/3.8/xml.html -->
<!--指定緩存持久化目錄-->
<persistence directory="${java.io.tmpdir}/ehcache-data"/>
<!-- 1、聲明一個(gè)名為foo的Cache-->
<cache alias="foo">
<!--2、foo的鍵值對(duì)被聲明為字符串類型,如果沒有指明,默認(rèn)是Object類型。-->
<key-type>java.lang.String</key-type>
<value-type>java.lang.String</value-type>
<resources>
<!--3、foo被聲明在堆上保存多達(dá)2,000個(gè)條目。-->
<heap unit="entries">2000</heap>
<!--4、在它開始被驅(qū)逐之前,還有多達(dá)500 MB的外堆內(nèi)存-->
<offheap unit="MB">500</offheap>
</resources>
</cache>
<!-- <cache-template>可以讓你創(chuàng)建一個(gè)抽象的<cache>配置文件,該配置文件可以進(jìn)一步的被擴(kuò)展。-->
<cache-template name="myDefaults">
<key-type>java.lang.Long</key-type>
<value-type>java.lang.String</value-type>
<!-- org.ehcache.config.ResourceUnit中的屬性,聲明在堆上保存多達(dá)2,000個(gè)條目 -->
<heap unit="entries">200</heap>
</cache-template>
<!-- bar是這樣的cache,它使用名為myDefaults的<cache-template>,并將其主鍵覆蓋到更廣泛的類型-->
<cache alias="bar" uses-template="myDefaults">
<key-type>java.lang.Number</key-type>
<expiry>
<!-- 通過ttl指定了cache過期時(shí)間,java.wechatutil.concurrent.TimeUnit中的屬性,這里指定為10秒 -->
<ttl unit="seconds">10</ttl>
</expiry>
</cache>
<!-- simpleCache是另一個(gè)cache,它使用myDefaults配置文件作為其唯一的CacheConfiguration-->
<cache alias="simpleCache" uses-template="myDefaults"/>
<cache-template name="stringTemplate">
<key-type>java.lang.String</key-type>
<value-type>java.lang.Object</value-type>
<heap unit="MB">200</heap>
</cache-template>
<cache alias="stringCache" uses-template="stringTemplate">
<value-type>java.lang.String</value-type>
<expiry>
<!-- 通過ttl指定了cache過期時(shí)間,java.wechatutil.concurrent.TimeUnit中的屬性,這里指定為10分鐘 -->
<ttl unit="minutes">10</ttl>
</expiry>
</cache>
</config>
SpringBoot配置
# 新版本使用jcache,老版本使用ehcache
spring.cache.jcache.config=classpath:ehcache3.xml
代碼配置方式
- 資源池生成器配置持久化
ResourcePoolsBuilder resourcePoolsBuilder = ResourcePoolsBuilder.newResourcePoolsBuilder()
// 堆內(nèi)緩存大小
.heap(heapCacheSize, MemoryUnit.KB)
// 堆外緩存大小
.offheap(offHeapCacheSize, MemoryUnit.MB)
// 文件緩存大小
.disk(diskCacheSize, MemoryUnit.MB);
- 生成配置
CacheConfigurationBuilder.newCacheConfigurationBuilder(keyType, valueType, resourcePoolsBuilder)
// 緩存超時(shí)時(shí)間
.withExpiry(ExpiryPolicyBuilder.timeToLiveExpiration(withExpiry))
// 統(tǒng)計(jì)對(duì)象大小時(shí)對(duì)象圖遍歷深度
.withSizeOfMaxObjectGraph(heapMaxObjectGraph)
//可緩存的最大對(duì)象大小
.withSizeOfMaxObjectSize(heapMaxObjectSize, MemoryUnit.MB)
// 添加監(jiān)聽器
.add(CacheEventListenerConfigurationBuilder.newEventListenerConfiguration(
new EhCacheEventListener(), EventType.EXPIRED).unordered().asynchronous())
//最后調(diào)用build()返回一個(gè)完整的實(shí)例,但是該實(shí)例并未初始化。
.build();
- 根據(jù)配置創(chuàng)建緩存管理器
CacheManagerBuilder.newCacheManagerBuilder().withCache(cacheName, config).build(true);