spring Cache初步認(rèn)識(shí)

首先讓我們來看一下原理圖


一:Spring緩存抽象

Spring從3.1開始定義了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口來統(tǒng)一不同的緩存技術(shù);并支持使用JCache(JSR-107)注解簡(jiǎn)化我們開發(fā);

Cache接口為緩存的組件規(guī)范定義,包含緩存的各種操作集合;

Cache接口下Spring提供了各種xxxCache的實(shí)現(xiàn);如RedisCache,EhCacheCache ,ConcurrentMapCache等;

每次調(diào)用需要緩存功能的方法時(shí),Spring會(huì)檢查檢查指定參數(shù)的指定的目標(biāo)方法是否已經(jīng)被調(diào)用過;如果有就直接從緩存中獲取方法調(diào)用后的結(jié)果,如果沒有就調(diào)用方法并緩存結(jié)果后返回給用戶。下次調(diào)用直接從緩存中獲取。

使用Spring緩存抽象時(shí)我們需要關(guān)注以下兩點(diǎn);

1、確定方法需要被緩存以及他們的緩存策略

2、從緩存中讀取之優(yōu)點(diǎn)

優(yōu)點(diǎn)

1、方便快捷高效,可直接嵌入多個(gè)現(xiàn)有的cache實(shí)現(xiàn),簡(jiǎn)寫了很多代碼,可觀性非常強(qiáng)


缺點(diǎn)

1、內(nèi)部調(diào)用,非public方法上使用注解,會(huì)導(dǎo)致緩存無效。由于SpringCache是基于Spring AOP的動(dòng)態(tài)代理實(shí)現(xiàn),由于代理本身的問題,當(dāng)同一個(gè)類中調(diào)用另一個(gè)方法,會(huì)導(dǎo)致另一個(gè)方法的緩存不能使用,這個(gè)在編碼上需要注意,避免在同一個(gè)類中這樣調(diào)用。如果非要這樣做,可以通過再次代理調(diào)用,如((Category)AopContext.currentProxy()).get(category)這樣避免緩存無效

2、不能支持多級(jí)緩存設(shè)置,如默認(rèn)到本地緩存取數(shù)據(jù),本地緩存沒有則去遠(yuǎn)端緩存取數(shù)據(jù),然后遠(yuǎn)程緩存取回來數(shù)據(jù)再存到本地緩存。

設(shè)計(jì)理念

正如Spring框架的其它服務(wù)一樣,Spring cache 首先是提供了一層抽象,核心抽象主要體現(xiàn)在兩個(gè)接口上

org.springframework.cache.Cache

org.springframework.cache.CacheManager

Cache代表緩存本身

CacheManager代表對(duì)緩存的處理和管理等。抽象的意義在于屏蔽實(shí)現(xiàn)細(xì)節(jié)的差異和提供擴(kuò)展性,這一層Cache的抽象解耦了緩存的使用和緩存的后端存儲(chǔ),這樣后續(xù)可以方便的更換后端存儲(chǔ)。

使用Spring Cache分三步:

聲明緩存

開啟Spring的cache功能

配置后端的存儲(chǔ)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容