您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何使用Ehcache”,在日常操作中,相信很多人在如何使用Ehcache問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何使用Ehcache”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
EhCache 是一個純Java的進程內緩存框架,具有快速、精干等特點,是Hibernate中默認的CacheProvider。
/** * 等價于 * <cache alias="preConfigured"> * <key-type>java.lang.Long</key-type> * <value-type>java.lang.String</value-type> * <resources> * <heap unit="entries">200</heap> * </resources> * </cache> * @author luther * @time 2019年7月12日 上午10:33:22 */ @Test public void testHelloWorld() { CacheConfiguration<Long, String> cacheConfiguration = CacheConfigurationBuilder .newCacheConfigurationBuilder(long.class, String.class, ResourcePoolsBuilder.heap(100)).build(); CacheManagerBuilder<CacheManager> cacheManagerBuilder = CacheManagerBuilder.newCacheManagerBuilder(); // 將CacheManager名定義為preConfigured cacheManagerBuilder.withCache("preConfigured", cacheConfiguration); // 創建CacheManager實例 CacheManager cacheManager = cacheManagerBuilder.build(); // 初始化CacheManager實例 cacheManager.init(); // 在CacheManager中創建名為myCache的緩存對象 Cache<Long, String> myCache = cacheManager.createCache("myCache", CacheConfigurationBuilder .newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.heap(1)).build()); // 往myCache緩存中放入鍵為1L,值為da one!的條目 myCache.put(1L, "da one!"); // 通過鍵獲取值 String value = myCache.get(1L); // 展示值 System.out.println(value); // 移除preConfigured緩存管理器 cacheManager.removeCache("preConfigured"); // 關閉緩存 cacheManager.close(); }
/** * 演示加載xml配置 * @author luther * @time 2019年7月12日 上午10:57:27 */ @Test public void testXml() { XmlConfiguration xmlConfig = new XmlConfiguration(Thread.currentThread() .getContextClassLoader().getResource("ehcache3.xml")); CacheManager cacheManager = CacheManagerBuilder.newCacheManager(xmlConfig); cacheManager.init(); // 在CacheManager中創建名為myCache的緩存對象 Cache<Long, String> myCache = cacheManager.createCache("myCache", CacheConfigurationBuilder .newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.heap(1)).build()); // 往myCache緩存中放入鍵為1L,值為da one!的條目 myCache.put(1L, "da one!"); // 通過鍵獲取值 String value = myCache.get(1L); // 展示值 System.out.println(value); // 移除preConfigured緩存管理器 cacheManager.removeCache("preConfigured"); // 關閉緩存 cacheManager.close(); }
配置文件如下:
<?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"> <cache alias="preConfigured"> <key-type>java.lang.Long</key-type> <value-type>java.lang.String</value-type> <resources> <heap unit="entries">200</heap> </resources> </cache> </config>
EhCache分2和3版本,而2版本和3版本的XML配置文件有所出入。
其中2版本的配置如下:
<?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://www.ehcache.org/v32' xsi:schemaLocation="http://www.ehcache.org/v2 http://ehcache.org/ehcache.xsd"> <!-- 指定數據保存在硬盤的地址 --> <diskStore path="java.io.tmpdir"/> <!-- 可配置路徑有: user.home(用戶的家目錄) user.dir(用戶當前的工作目錄) java.io.tmpdir(默認的臨時目錄) ehcache.disk.store.dir(ehcache的配置目錄) 絕對路徑(如:d:\\ehcache) --> <!-- 指定默認使用的cache --> <defaultCache <!-- 清理保存在磁盤上的過期緩存項目的線程的啟動時間間隔,默認120秒。 --> diskExpiryThreadIntervalSeconds="120" <!-- 設置元素不永遠存儲 --> eternal="false" <!-- 磁盤中的最大對象數,默認為0不限制 --> maxEntriesLocalDisk="0" <!-- 設置緩存在本地內存中最大緩存項數量,0沒有限制 --> maxEntriesLocalHeap="0" <!-- 內存回收策略(當緩存項達到maxEntriesLocalHeap限制時,剔除緩存項的策略), 默認回收策略是:LRU最近最少使用Least Recently Used, 其他策略有:先進先出First In First Out,Less Frequently Used使用頻率最低 --> memoryStoreEvictionPolicy="LRU" <!-- 設置活動過期時間為1小時 --> timeToIdleSeconds="3600" <!-- 設置過期時間為永久 --> timeToLiveSeconds="0" <!-- 是否保存至硬盤 --> overflowToDisk="false" <!-- 當緩存項被讀出時,是否返回一份它的拷貝(返回對象是緩存中對象的拷貝)。默認fasle。 --> copyOnRead="true" <!-- 當緩存項被寫入時,是否寫入一份它的拷貝(寫入緩存的是寫入對象的拷貝)。默認false --> copyOnWrite="true" <!-- 是否收集統計信息,默認為false,不收集 --> statistics="true"> <!-- 指定拷貝的策略 --> <copyStrategy class="net.sf.ehcache.store.compound.ReadWriteSerializationCopyStrategy"/> <!-- 指定持久化策略 --> <persistence strategy="none"></persistence> <!-- 可配置strategy有: localRestartable(復制所有緩存項到硬盤,僅適用于企業ehcache用戶) ocalTempSwap(當緩存空間滿時,緩存到硬盤) none(不緩存到硬盤) distributed(需要在配置terracotta的情況下使用,不適用于單實例) --> </defaultCache> </ehcache>
如果覺的不夠詳細,可以參考官方給的2版本的XML詳解
3版本為:
<?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"> <!-- cache配置模板,可以通過uses-template被其它配置繼承 --> <cache-template name="template"> <!-- 指定鍵的類型,默認為java.lang.Object serializer:定義序列化的方式 copier:定義用于復制類型實例的協定 --> <key-type serializer="org.ehcache.impl.serialization.PlainJavaSerializer" copier="org.ehcache.impl.copy.SerializingCopier">java.lang.String</key-type> <!-- 指定值的類型,默認為java.lang.Object --> <value-type>java.lang.String</value-type> <!-- 定義過期失效機制 --> <expiry> <!-- 自定義的時間過期類全路徑名,需要實現ExpiryPolicy接口 --> <class>com.luther.expiryPolicy.MyExpiryPolicy</class> <!-- 意味著緩存內容不會過期 --> <none /> <!-- TimeToIdleExpiryPolicy用于設置對象在cache中的最大閑置時間(訪問該對象時間就會重置) --> <tti>3600</tti> <!-- TimeToLiveExpiryPolicy用于設置對象在cache中的最大存活時間(不管有沒有訪問,到時即失效) --> <ttl>0</ttl> </expiry> <resources> <!-- 硬盤 --> <disk persistent="true" unit="MB">20</disk> <!-- 堆 --> <heap unit="entries">200</heap> <!-- 非堆 --> <offheap unit="MB" xsi:type="memory-type"></offheap> </resources> </cache-template> </config>
到此,關于“如何使用Ehcache”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。