springboot整合EhCache實現(xiàn)單服務(wù)緩存的操作方法_第1頁
springboot整合EhCache實現(xiàn)單服務(wù)緩存的操作方法_第2頁
springboot整合EhCache實現(xiàn)單服務(wù)緩存的操作方法_第3頁
springboot整合EhCache實現(xiàn)單服務(wù)緩存的操作方法_第4頁
springboot整合EhCache實現(xiàn)單服務(wù)緩存的操作方法_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quá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)用的緩存,當應(yīng)用進行分布式部署的時候,各應(yīng)用的副本之間緩存是不同步的。EhCache由于沒有獨立的部署服務(wù),所以它的緩存和應(yīng)用的內(nèi)存是耦合在一起的,當緩存數(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é)的學習,可以使用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可以不用寫,因為默認就是這個路徑。但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è)置對象在失效前的允許閑置時間(單位:秒)。僅當eternal=false對象不是永久有效時使用,可選屬性,默認值是0,也就是可閑置時間無窮大。timeToLiveSeconds:設(shè)置對象在失效前允許存活時間(單位:秒)。最大時間介于創(chuàng)建時間和失效時間之間。僅當eternal=false對象不是永久有效時使用,默認是0.,也就是對象存活時間無窮大。overflowToDisk:當內(nèi)存中對象數(shù)量達到maxElementsInMemory時,Ehcache將會對象寫到磁盤中。diskSpoolBufferSizeMB:這個參數(shù)設(shè)置DiskStore(磁盤緩存)的緩存區(qū)大小。默認是30MB。每個Cache都應(yīng)該有自己的一個緩沖區(qū)。maxElementsOnDisk:硬盤最大緩存?zhèn)€數(shù)。diskPersistent:是否緩存虛擬機重啟期數(shù)據(jù)。diskExpiryThreadIntervalSeconds:磁盤失效線程運行時間間隔,默認是120秒。memoryStoreEvictionPolicy:當達到maxElementsInMemory限制時,Ehcache將會根據(jù)指定的策略去清理內(nèi)存。默認策略是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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論