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種註解可以組合使用。
相關文章
- Spring Boot整合Hazelcast實現叢集與分散式記憶體快取Spring BootAST分散式記憶體快取
- 另一種快取,Spring Boot 整合 Ehcache快取Spring Boot
- Mybatis 整合 ehcache快取MyBatis快取
- 介紹SpringBoot 整合 Redis 快取Spring BootRedis快取
- Go實戰 | 基於本地記憶體的快取的應用及實現Go記憶體快取
- Spring Boot:簡單使用EhCache快取框架Spring Boot快取框架
- 使用Go實現健壯的記憶體型快取Go記憶體快取
- CPU快取記憶體快取記憶體
- 快取及使用 Circuit Breaker 限制記憶體使用快取UI記憶體
- 記憶體回收介紹記憶體
- CUDA記憶體介紹記憶體
- spring boot使用Jedis整合Redis實現快取(AOP)Spring BootRedis快取
- Java快取EhcacheJava快取
- Spring boot學習(八)Spring boot配置ehcache快取框架Spring Boot快取框架
- 使用EHCACHE三步搞定SPRING BOOT 快取Spring Boot快取
- Spring Boot Oauth2快取UserDetails到EhcacheSpring BootOAuth快取AI
- Spring Boot基礎教程:EhCache快取的使用Spring Boot快取
- 在 Go 專案中基於本地記憶體快取的實現及應用Go記憶體快取
- 多核cpu、cpu快取記憶體、快取一致性協議、快取行、記憶體快取記憶體協議
- 記憶體快取選型記憶體快取
- [譯]高效能快取庫Caffeine介紹及實踐快取
- 快取初見——EhCache快取
- EhCache快取使用教程快取
- SpringBoot快取管理(二) 整合Redis快取實現Spring Boot快取Redis
- SpringBoot2 整合Ehcache元件,輕量級快取管理Spring Boot元件快取
- Ehcache 介紹(3)--Ehcache3 基本使用
- OS實驗八:採用快取記憶體實現檔案讀寫快取記憶體
- CPU快取和記憶體屏障快取記憶體
- docker部署redis快取記憶體DockerRedis快取記憶體
- 談談CPU快取記憶體快取記憶體
- django 快取表格到記憶體Django快取記憶體
- redis快取介紹Redis快取
- Spring Cache與Ehcache 3整合Spring
- 瀏覽器performance工具介紹及記憶體問題表現與監控記憶體的幾種方式瀏覽器ORM記憶體
- Java記憶體快取-通過Google Guava建立快取Java記憶體快取GoGuava
- 記憶(快取)函式返回值:Python 實現快取函式Python
- Go實踐:用Sync.Map實現簡易記憶體快取系統Go記憶體快取
- Springboot應用快取實踐之:Ehcache加持Spring Boot快取