Ehcache 3.X快速使用
簡介 Ehcache 是一個開源的高效能緩衝,擁有很高的拓展性和伸縮性,廣泛使用各種 Java 項目中(如 Hibernate 預設使用 Ehcache作為二級緩衝),在目前基於 Java 的緩衝方案裡,幾乎是效能最高的實現,目前新版本的 Ehcache 3.X 通過支援 Terracotta 改善了2.X 版本體驗不佳的分布式緩衝支援;
Ehcahe 3.X 和 Ehache 2.X 的 API 差異比較大,以下樣本以 Ehcache 3.x 為主;
Ehcache 官網: http://www.ehcache.org Ehcache 3.X 技術文檔: http://www.ehcache.org/documentation/
使用 Ehcache 需要匯入依賴:org.ehcache:ehcache 如在 Gradle 中:
dependencies {
compile 'org.ehcache:ehcache:3.4.0'
}
Hello world 以下通過一個簡單的樣本,來示範 Ehcache 3.X 的基本使用,Ehcache支援2種配置方式:直接通過編碼配置,通過XML配置;
直接編碼配置
//構建一個緩衝管理器,建立一個預設的緩衝 "preConfigured"
CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder()
.withCache("preConfigured", //緩衝別名
CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class,
ResourcePoolsBuilder.heap(100)) //設定緩衝堆容納元素個數
.build())
.build(true); //建立之後立即初始化
//從緩衝管理器中擷取預定的緩衝
Cache<Long, String> preConfigured
= cacheManager.getCache("preConfigured", Long.class, String.class);
//直接從緩衝管理器建立一個新的緩衝
Cache<Long, String> myCache = cacheManager.createCache("myCache",
CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class,
ResourcePoolsBuilder.heap(100)).build());
//向緩衝裡添加緩衝索引值
myCache.put(1L, "Hello World!");
//從指定緩衝裡擷取索引值
String value = myCache.get(1L);
cacheManager.close();
通過XML配置 在項目根目錄建立XML設定檔: ehcache.xml
<?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">
<!--緩衝配置方式1:直接配置一個cache節點-->
<!--完整配置一個緩衝-->
<cache alias="myCache1">
<!--儲存條目索引和儲存實值型別配置-->
<key-type>java.lang.String</key-type> <!--緩衝條目索引-->
<value-type>java.lang.String</value-type> <!--緩衝項目類型-->
<!--儲存層配置-->
<resources>
<heap unit="entries">2000</heap> <!--配置堆儲存-->
<offheap unit="MB">20</offheap> <!--配置堆外儲存-->
</resources>
</cache>
<!--緩衝配置方式2:通過緩衝模板配置cache節點-->
<!--配置一個緩衝模板-->
<cache-template name="myDefault">
<key-type>java.lang.Long</key-type>
<value-type>java.lang.String</value-type>
<heap unit="entries">200</heap>
</cache-template>
<!--使用緩衝模板配置緩衝-->
<cache alias="myCache2" uses-template="myDefault" />
<cache alias="myCache3" uses-template="myDefault">
<value-type>java.lang.Number</value-type>
</cache>
</config>
使用緩衝代碼:
//從設定檔建立設定物件
Configuration xmlConf = new XmlConfiguration(getClass().getResource("/ehcache.xml"));
//建立緩衝管理器
CacheManager cacheManager = CacheManagerBuilder.newCacheManager(xmlConf);
//從緩衝管理器中擷取緩衝
Cache<Long,String> mycache1 = cacheManager.getCache("myCache1",Long.class,String.class);
//使用緩衝
mycache1.put(1L,"Hello world!");
mycache1.get(1L);
//清空緩衝,關閉緩衝管理器
mycache1.clear();
cacheManager.close();
詳細配置 以下是一份比較詳細的 ehache 設定檔:
<?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">
<!--配置硬碟持久化目錄-->
<persistence directory="usr/tmp/ehcache" />
<!--完整配置一個緩衝-->
<cache alias="myCache1">
<!--儲存條目索引和儲存實值型別配置-->
<key-type>java.lang.String</key-type> <!--緩衝條目索引-->
<value-type>java.lang.String</value-type> <!--緩衝項目類型-->
<!--緩衝到期配置-->
<expiry>
<tti unit="minutes">2</tti> <!--使用 TTI(time to idle) 策略-->
<!--<ttl unit="minutes">30</ttl> 使用 TTL(time to leave)策略 -->
</expiry>
<!--儲存層配置-->
<resources>
<heap unit="entries">2000</heap> <!--配置堆儲存-->
<offheap unit="MB">20</offheap> <!--配置堆外儲存-->
<disk unit="MB" persistent="true"