Ehcache3配置方式與Ehcache2的配置方式區別很大!
緩存管理器只有全局狀態下其餘地方纔能根據名稱拿到緩存,也就是隻有保證在同一個緩存管理器下才能拿到指定緩存兩種配置方式可同時使用html
<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"/> <!-- 一、聲明一個名爲foo的Cache--> <cache alias="foo"> <!--二、foo的鍵值對被聲明爲字符串類型,若是沒有指明,默認是Object類型。--> <key-type>java.lang.String</key-type> <value-type>java.lang.String</value-type> <resources> <!--三、foo被聲明在堆上保存多達2,000個條目。--> <heap unit="entries">2000</heap> <!--四、在它開始被驅逐以前,還有多達500 MB的外堆內存--> <offheap unit="MB">500</offheap> </resources> </cache> <!-- <cache-template>能夠讓你建立一個抽象的<cache>配置文件,該配置文件能夠進一步的被擴展。--> <cache-template name="myDefaults"> <key-type>java.lang.Long</key-type> <value-type>java.lang.String</value-type> <!-- org.ehcache.config.ResourceUnit中的屬性,聲明在堆上保存多達2,000個條目 --> <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過時時間,java.wechatutil.concurrent.TimeUnit中的屬性,這裏指定爲10秒 --> <ttl unit="seconds">10</ttl> </expiry> </cache> <!-- simpleCache是另外一個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過時時間,java.wechatutil.concurrent.TimeUnit中的屬性,這裏指定爲10分鐘 --> <ttl unit="minutes">10</ttl> </expiry> </cache> </config>
# 新版本使用jcache,老版本使用ehcache spring.cache.jcache.config=classpath:ehcache3.xml
ResourcePoolsBuilder resourcePoolsBuilder = ResourcePoolsBuilder.newResourcePoolsBuilder() // 堆內緩存大小 .heap(heapCacheSize, MemoryUnit.KB) // 堆外緩存大小 .offheap(offHeapCacheSize, MemoryUnit.MB) // 文件緩存大小 .disk(diskCacheSize, MemoryUnit.MB);
CacheConfigurationBuilder.newCacheConfigurationBuilder(keyType, valueType, resourcePoolsBuilder) // 緩存超時時間 .withExpiry(ExpiryPolicyBuilder.timeToLiveExpiration(withExpiry)) // 統計對象大小時對象圖遍歷深度 .withSizeOfMaxObjectGraph(heapMaxObjectGraph) //可緩存的最大對象大小 .withSizeOfMaxObjectSize(heapMaxObjectSize, MemoryUnit.MB) // 添加監聽器 .add(CacheEventListenerConfigurationBuilder.newEventListenerConfiguration( new EhCacheEventListener(), EventType.EXPIRED).unordered().asynchronous()) //最後調用build()返回一個完整的實例,可是該實例並未初始化。 .build();
CacheManagerBuilder.newCacheManagerBuilder().withCache(cacheName, config).build(true);