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);