更新時(shí)間:2022-08-08 11:53:34 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1570次
我們先來(lái)了解一下什么是EhCache ,它是一個(gè)純Java的進(jìn)程內(nèi)緩存框架,具有快速、精干等特點(diǎn),是Hibernate中默認(rèn)的CacheProvider。它使用的是JVM的堆內(nèi)存,超過(guò)內(nèi)存可以設(shè)置緩存到磁盤(pán),企業(yè)版的可以使用JVM堆外的物理內(nèi)存。
首先加入最新的ehcache的maven依賴
net.sf.ehcache
ehcache
2.10.4
在Spring配置文件中加入如下配置
在classpath中加入ehcache的配置文件ehcache.xml
xsi:noNamespaceSchemaLocation="ehcache.xsd"
updateCheck="false"
monitoring="autodetect"
dynamicConfig="true"
maxBytesLocalHeap="800M"
maxBytesLocalDisk="200G">
eternal="true"
overflowToDisk="true"
diskPersistent="true"
memoryStoreEvictionPolicy="LRU"
/>
eternal="false"
timeToIdleSeconds="0"
timeToLiveSeconds="86400"
overflowToDisk="true"
diskPersistent="true"
diskExpiryThreadIntervalSeconds="1800"
memoryStoreEvictionPolicy="LRU"
/>
配置文件說(shuō)明
Spring Cache的Cacheable注解不支持失效時(shí)間設(shè)置,所以只能在ehcache.xml上面設(shè)計(jì)緩存。上面的配置文件配置了兩種緩存,一種永久不過(guò)期的,一種緩存1小時(shí),更多時(shí)限的在后面加就行。
參數(shù)說(shuō)明
updateCheck: 建議關(guān)閉ehcache的自動(dòng)更新,不然每次啟動(dòng)都要去官網(wǎng)更新
monitoring:自動(dòng)檢測(cè)
dynamicConfig: 支持動(dòng)態(tài)改變配置
maxBytesLocalHeap: 最大堆內(nèi)存使用,單位可為K,M,G
maxBytesLocalDisk: 最大磁盤(pán)使用,單位可為K,M,G
maxBytesLocalHeap、maxBytesLocalDisk這兩個(gè)是定義在總配置上的,不過(guò)也可以指定到具體的緩存上面去,不過(guò)最大容量以總配置上面的大小為準(zhǔn)。
diskStore:指定數(shù)據(jù)存儲(chǔ)位置,可指定磁盤(pán)中的文件夾位置
defaultCache: 默認(rèn)的管理策略
以下屬性是必須的
name: Cache的名稱,必須是唯一的,ehcache會(huì)把這個(gè)cache放到HashMap里去。
maxElementsInMemory:在內(nèi)存中緩存的element的最大數(shù)目。
maxElementsOnDisk:在磁盤(pán)上緩存的element的最大數(shù)目,默認(rèn)值為0,表示不限制。
eternal:設(shè)定緩存的elements是否永遠(yuǎn)不過(guò)期。如果為true,則緩存的數(shù)據(jù)始終有效,如果為false那么還要根據(jù)timeToIdleSeconds,timeToLiveSeconds判斷。
overflowToDisk: 如果內(nèi)存中數(shù)據(jù)超過(guò)內(nèi)存限制,是否要緩存到磁盤(pán)上。
以下屬性是可選的:
timeToIdleSeconds: 對(duì)象空閑時(shí)間,指對(duì)象在多長(zhǎng)時(shí)間沒(méi)有被訪問(wèn)就會(huì)失效。只對(duì)eternal為false的有效。默認(rèn)值0,表示一直可以訪問(wèn)。
timeToLiveSeconds: 對(duì)象存活時(shí)間,指對(duì)象從創(chuàng)建到失效所需要的時(shí)間。只對(duì)eternal為false的有效。默認(rèn)值0,表示一直可以訪問(wèn)。
diskPersistent: 是否在磁盤(pán)上持久化。指重啟jvm后,數(shù)據(jù)是否有效。默認(rèn)為false。
diskExpiryThreadIntervalSeconds: 對(duì)象檢測(cè)線程運(yùn)行時(shí)間間隔。標(biāo)識(shí)對(duì)象狀態(tài)的線程多長(zhǎng)時(shí)間運(yùn)行一次。
diskSpoolBufferSizeMB: DiskStore使用的磁盤(pán)大小,默認(rèn)值30MB。每個(gè)cache使用各自的DiskStore。
memoryStoreEvictionPolicy: 如果內(nèi)存中數(shù)據(jù)超過(guò)內(nèi)存限制,向磁盤(pán)緩存時(shí)的策略。默認(rèn)值LRU,可選FIFO、LFU。
FIFO-first in first out (先進(jìn)先出)。
LFU-Less Frequently Used (最少使用),意思是一直以來(lái)最少被使用的。緩存的元素有一個(gè)hit 屬性,hit 值最小的將會(huì)被清出緩存。
LRU -Least Recently Used(最近最少使用),(ehcache 默認(rèn)值).緩存的元素有一個(gè)時(shí)間戳,當(dāng)緩存容量滿了,而又需要騰出地方來(lái)緩存新的元素的時(shí)候,那么現(xiàn)有緩存元素中時(shí)間戳離當(dāng)前時(shí)間最遠(yuǎn)的元素將被清出緩存。
使用Spring提供的注解即可,傳入vaue,key等注解需要的參數(shù)。
@Cacheable:先查緩存,有則不進(jìn)行方法,沒(méi)有就進(jìn)行方法再緩存起來(lái)。
@CachePut:每次都執(zhí)行方法,再放入緩存。
@CacheEvict:讓緩存失效。
@Caching:以上3種注解可以組合使用。
以上就是關(guān)于“開(kāi)啟Java高速緩存:Ehcache介紹及整合Spring實(shí)現(xiàn)高速緩存”的介紹,大家如果想了解更多相關(guān)知識(shí),可以關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java在線學(xué)習(xí),里面的課程內(nèi)容從入門到精通,細(xì)致全面,很適合小白學(xué)習(xí),希望對(duì)大家能夠有所幫助。
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743