javascript
Ehcache介绍及整合Spring实现高速缓存
轉載自?Ehcache介紹及整合Spring實現高速緩存
Ehcache介紹
EhCache?是一個純Java的進程內緩存框架,具有快速、精干等特點,是Hibernate中默認的CacheProvider。它使用的是JVM的堆內存,超過內存可以設置緩存到磁盤,企業版的可以使用JVM堆外的物理內存。
Spring整合Ehcache
首先加入最新的ehcache的maven依賴
<!-- ehcache -->
<dependency>
????????<groupId>net.sf.ehcache</groupId>
????????<artifactId>ehcache</artifactId>
????????<version>2.10.4</version>
</dependency>
在Spring配置文件中加入如下配置
<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
????????<property name="configLocation" value="classpath:ehcache.xml" />
</bean>
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
????????<property name="cacheManager" ref="ehcache" />
</bean>
<cache:annotation-driven cache-manager="cacheManager" />
在classpath中加入ehcache的配置文件ehcache.xml
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
? ? ? ? ?xsi:noNamespaceSchemaLocation="ehcache.xsd"
? ? ? ? ?updateCheck="false"?
? ? ? ? ?monitoring="autodetect"
? ? ? ? ?dynamicConfig="true"
? ? ? ? ?maxBytesLocalHeap="800M"
? ? ? ? ?maxBytesLocalDisk="200G">
????<diskStore path="./cache"/>
????<!-- 永不過期 -->
? ? <defaultCache?
? ?? ????eternal="true" ?
? ? ? ? ????overflowToDisk="true" ?
? ? ? ? ????diskPersistent="true" ?
? ? ? ? ????memoryStoreEvictionPolicy="LRU"?
? ?/>
? ? ? ??
? ?<!-- 緩存一天 -->
? ?<cache name="oneDayCache"?
? ?? ????eternal="false" ?
? ? ? ? ????timeToIdleSeconds="0"?
? ? ? ????? timeToLiveSeconds="86400"?
? ? ? ? ????overflowToDisk="true" ?
? ? ? ? ????diskPersistent="true" ?
? ? ? ????? diskExpiryThreadIntervalSeconds="1800"?
? ? ? ? ????memoryStoreEvictionPolicy="LRU"?
? ? />?
</ehcache>
配置文件說明
Spring Cache的Cacheable注解不支持失效時間設置,所以只能在ehcache.xml上面設計緩存。上面的配置文件配置了兩種緩存,一種永久不過期的,一種緩存1小時,更多時限的在后面加就行。
參數說明
updateCheck: 建議關閉ehcache的自動更新,不然每次啟動都要去官網更新
monitoring:自動檢測
dynamicConfig: 支持動態改變配置
maxBytesLocalHeap: 最大堆內存使用,單位可為K,M,G
maxBytesLocalDisk: 最大磁盤使用,單位可為K,M,G
maxBytesLocalHeap、maxBytesLocalDisk這兩個是定義在總配置上的,不過也可以指定到具體的緩存上面去,不過最大容量以總配置上面的大小為準。
diskStore:指定數據存儲位置,可指定磁盤中的文件夾位置
defaultCache: 默認的管理策略 ?
以下屬性是必須的
name: Cache的名稱,必須是唯一的,ehcache會把這個cache放到HashMap里去。
maxElementsInMemory:在內存中緩存的element的最大數目。
maxElementsOnDisk:在磁盤上緩存的element的最大數目,默認值為0,表示不限制。 ?
?
eternal:設定緩存的elements是否永遠不過期。如果為true,則緩存的數據始終有效,如果為false那么還要根據timeToIdleSeconds,timeToLiveSeconds判斷。 ??
overflowToDisk: 如果內存中數據超過內存限制,是否要緩存到磁盤上。 ??
??
以下屬性是可選的: ?
timeToIdleSeconds: 對象空閑時間,指對象在多長時間沒有被訪問就會失效。只對eternal為false的有效。默認值0,表示一直可以訪問。?
?
timeToLiveSeconds: 對象存活時間,指對象從創建到失效所需要的時間。只對eternal為false的有效。默認值0,表示一直可以訪問。 ?
diskPersistent: 是否在磁盤上持久化。指重啟jvm后,數據是否有效。默認為false。 ??
diskExpiryThreadIntervalSeconds: 對象檢測線程運行時間間隔。標識對象狀態的線程多長時間運行一次。 ??
diskSpoolBufferSizeMB: DiskStore使用的磁盤大小,默認值30MB。每個cache使用各自的DiskStore。 ??
memoryStoreEvictionPolicy: 如果內存中數據超過內存限制,向磁盤緩存時的策略。默認值LRU,可選FIFO、LFU。 ??
緩存的3 種清空策略
FIFO-first in first out (先進先出)。
LFU-Less Frequently Used (最少使用),意思是一直以來最少被使用的。緩存的元素有一個hit 屬性,hit 值最小的將會被清出緩存。 ?
LRU -Least Recently Used(最近最少使用),(ehcache 默認值).緩存的元素有一個時間戳,當緩存容量滿了,而又需要騰出地方來緩存新的元素的時候,那么現有緩存元素中時間戳離當前時間最遠的元素將被清出緩存。
緩存使用
使用Spring提供的注解即可,傳入vaue,key等注解需要的參數。
@Cacheable:先查緩存,有則不進行方法,沒有就進行方法再緩存起來。
@CachePut:每次都執行方法,再放入緩存。
@CacheEvict:讓緩存失效。
@Caching:以上3種注解可以組合使用。
總結
以上是生活随笔為你收集整理的Ehcache介绍及整合Spring实现高速缓存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 9个最佳猫标识以及如何制作自己的[202
- 下一篇: 怎么不用胶水和粘土做泥 不用胶水和粘土做