Ehcache3配置使用

Ehcache3配置方式與Ehcache2的配置方式區別很大!
緩存管理器只有全局狀態下其餘地方纔能根據名稱拿到緩存,也就是隻有保證在同一個緩存管理器下才能拿到指定緩存

兩種配置方式可同時使用html

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"/>

    <!-- 一、聲明一個名爲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>

SpringBoot配置

# 新版本使用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);
相關文章
相關標籤/搜索