




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第springboot整合EhCache實現(xiàn)單服務(wù)緩存的操作方法目錄一、整合SpringCache與Ehcache二、緩存的使用方法三、緩存使用中的坑在Spring框架內(nèi)我們首選SpringCache作為緩存框架的門面,之所以說它是門面,是因為它只提供接口層的定義以及AOP注解等,不提供緩存的具體存取操作。緩存的具體存儲還需要具體的緩存存儲,比如EhCache、Redis等。SpringCache與緩存框架的關(guān)系有點像SLF4j與logback、log4j的關(guān)系。
EhCache適用于單體應(yīng)用的緩存,當(dāng)應(yīng)用進行分布式部署的時候,各應(yīng)用的副本之間緩存是不同步的。EhCache由于沒有獨立的部署服務(wù),所以它的緩存和應(yīng)用的內(nèi)存是耦合在一起的,當(dāng)緩存數(shù)據(jù)量比較大的時候要注意系統(tǒng)資源能不能滿足應(yīng)用內(nèi)存的要求。redis由于是可以獨立部署的內(nèi)存數(shù)據(jù)庫服務(wù),所以它能夠滿足應(yīng)用分布式部署的緩存集中存儲的要求,也就是分布式部署的應(yīng)用使用一份緩存,從而緩存自然是同步的。但是對于一些小規(guī)模的應(yīng)用,額外引入了redis服務(wù),增加了運維的成本。
所以,比如我們自己開發(fā)一個小博客,自己的服務(wù)器又沒有很多的資源獨立部署redis服務(wù),用EHCache作為緩存是比較好的選擇。如果是企業(yè)級用戶量,使用redis獨立部署的服務(wù)作為緩存是更好的選擇。
一、整合SpringCache與Ehcache
通過上一小節(jié)的學(xué)習(xí),可以使用Springcache通過注解的方式來操作緩存,一定程度上減少了程序員緩存操作代碼編寫量。注解添加和移除都很方便,不與業(yè)務(wù)代碼耦合,容易維護。這一部分內(nèi)容是沒有變化的,所以我們?nèi)匀皇褂肧pringCache。
第一步:pom.xml添加Springcache和Ehcache的jar依賴:
dependency
groupIdorg.springframework.boot/groupId
artifactIdspring-boot-starter-cache/artifactId
/dependency
dependency
groupIdnet.sf.ehcache/groupId
artifactIdehcache/artifactId
/dependency
第二步:添加入口啟動類@EnableCaching注解開啟Caching,實例如下。
@EnableCaching
在SpringBoot中通過@EnableCaching注解自動化配置合適的緩存管理器(CacheManager),SpringBoot根據(jù)下面的順序去偵測緩存提供者,也就是說SpringCache支持下面的這些緩存框架:
GenericJCache(JSR-107)(EhCache3,Hazelcast,Infinispan,andothers)EhCache2.x(發(fā)現(xiàn)ehcache的bean,就使用ehcache作為緩存)HazelcastInfinispanCouchbaseRedisCaffeineSimple
yml配置
需要說明的是config:classpath:/ehcache.xml可以不用寫,因為默認(rèn)就是這個路徑。但ehcache.xml必須有。
spring:
cache:
type:ehcache
ehcache:
config:classpath:/ehcache.xml
在resources目錄下,添加ehcache的配置文件ehcache.xml,文件內(nèi)容如下:
ehcache
diskStorepath="java.io.tmpdir/cache_dongbb"/
defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="false"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
cachename="user_detail"
maxElementsInMemory="10000"
eternal="true"
overflowToDisk="true"
diskPersistent="true"
diskExpiryThreadIntervalSeconds="600"/
/ehcache
conds="600"/
/ehcache
配置含義:
name:緩存名稱,與緩存注解的value(cacheNames)屬性值相同。maxElementsInMemory:緩存最大個數(shù)。eternal:緩存對象是否永久有效,一但設(shè)置了,timeout將不起作用。timeToIdleSeconds:設(shè)置對象在失效前的允許閑置時間(單位:秒)。僅當(dāng)eternal=false對象不是永久有效時使用,可選屬性,默認(rèn)值是0,也就是可閑置時間無窮大。timeToLiveSeconds:設(shè)置對象在失效前允許存活時間(單位:秒)。最大時間介于創(chuàng)建時間和失效時間之間。僅當(dāng)eternal=false對象不是永久有效時使用,默認(rèn)是0.,也就是對象存活時間無窮大。overflowToDisk:當(dāng)內(nèi)存中對象數(shù)量達到maxElementsInMemory時,Ehcache將會對象寫到磁盤中。diskSpoolBufferSizeMB:這個參數(shù)設(shè)置DiskStore(磁盤緩存)的緩存區(qū)大小。默認(rèn)是30MB。每個Cache都應(yīng)該有自己的一個緩沖區(qū)。maxElementsOnDisk:硬盤最大緩存?zhèn)€數(shù)。diskPersistent:是否緩存虛擬機重啟期數(shù)據(jù)。diskExpiryThreadIntervalSeconds:磁盤失效線程運行時間間隔,默認(rèn)是120秒。memoryStoreEvictionPolicy:當(dāng)達到maxElementsInMemory限制時,Ehcache將會根據(jù)指定的策略去清理內(nèi)存。默認(rèn)策略是LRU(最近最少使用)。你可以設(shè)置為FIFO(先進先出)或是LFU(較少使用)。clearOnFlush:內(nèi)存數(shù)量最大時是否清除。diskStore則表示臨時緩存的硬盤目錄。
java.io.tmpdir操作系統(tǒng)緩存的臨時目錄,不同操作系統(tǒng)的緩存臨時目錄不一樣,在Windows的緩存目錄為C:\\Users\\登錄用戶~1\\AppData\\Local\\Temp\\;Linux目錄為/tmp
二、緩存的使用方法
緩存的使用方法仍然是SpringCache的注解,使用方法是一樣的,參考本專欄文章《結(jié)合redis詳述聲明式緩存注解的使用-Cacheable、CacheEvict、CachePut、Caching》。
三、緩存使用中的坑
注意:@Cacheable注解在對象內(nèi)部調(diào)用不會生效。這個坑不是單獨針對EhCache的,只要使用SpringCache都會有這個問題。
@Component
publicclassClassA{
@Override
publicvoidMethodA(Stringusername){
MethodA1(username);//緩存失效,@Cacheable注解在對象內(nèi)部調(diào)用不會生效
@Cacheable(value=USER_DETAIL,key="#username")
publicvoidMethodA1(Stringusername){
//執(zhí)行方法體
原因:Spring緩存注解是基于SpringAOP切面,必須走代理才能生效,同類調(diào)用或者子類調(diào)用父類帶有緩存注解的方法時屬于內(nèi)部調(diào)用,沒有走代理,所以注解不生效。
解決辦法:將緩存方法,放在一個單獨的類中
@Component
publicclassClassA{
@Resource
ClassBclassB;
@Override
publicvoidmethodA(Stringusername){
classB.metho
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025春季學(xué)期國家開放大學(xué)??啤督ㄖこ逃嬃颗c計價》一平臺在線形考(作業(yè)1至4)試題及答案
- 企業(yè)員工技能培訓(xùn)體系
- 【MOOC期末】《大學(xué)物理I力學(xué)、相對論、電磁學(xué)》(北京交通大學(xué))期末考試慕課答案
- 醫(yī)院運輸工作培訓(xùn)
- 路燈維修管理合同協(xié)議
- 辣椒種植收購合同協(xié)議
- 水池修建協(xié)議書
- 車間沖床機械歸屬合同協(xié)議
- 車輛保險轉(zhuǎn)讓合同協(xié)議
- 路政移栽樹木合同協(xié)議
- 2025屆廣東省廣州市省實教育集團中考生物對點突破模擬試卷含解析
- 河道疏浚及堤防工程施工重難點及相關(guān)技術(shù)保證措施
- 出國人員安全教育
- 湖南省邵陽市2024年中考物理試卷(解析版)
- 2025年中考語文復(fù)習(xí)之小題狂練300題(選擇題):語法知識(20題)
- 天津中考英語2020-2024年5年真題匯編-教師版-專題07 完成句子
- 關(guān)于建筑設(shè)計優(yōu)化合理化建議書
- 無處不在-傳染病知到智慧樹章節(jié)測試課后答案2024年秋南昌大學(xué)
- 風(fēng)電場道路施工安全管理方案
- 車間現(xiàn)場定置管理制度
- 國家電網(wǎng)招聘考試試題及答案
評論
0/150
提交評論