Spring Cache 概念
成都創(chuàng)新互聯(lián)長期為成百上千客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為宜秀企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計、成都做網(wǎng)站,宜秀網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
從Spring 3.1版本開始,提供了一種透明的方式來為現(xiàn)有的Spring 應(yīng)用添加cache,使用起來就像@Transaction一樣。在應(yīng)用層面與后端存儲之間,提供了一層抽象,這層抽象目的在于封裝各種可插拔的后端存儲( Ehcache Guava redis),最小化因為緩存給現(xiàn)有業(yè)務(wù)代碼帶來的侵入。
Spring 的緩存技術(shù)還具備相當(dāng)?shù)撵`活性。不僅能夠使用 SpEL(Spring Expression Language)來定義緩存的 key 和各種 condition,還提供開箱即用的緩存暫時存儲方案,也支持和主流的專業(yè)緩存比如 EHCache 集成。
其特點總結(jié)例如以下:
設(shè)計理念
正如Spring框架的其它服務(wù)一樣,Spring cache 首先是提供了一層抽象,核心抽象主要體現(xiàn)在兩個接口上
org.springframework.cache.Cache
org.springframework.cache.CacheManager
Cache代表緩存本身
CacheManager代表對緩存的處理和管理等。抽象的意義在于屏蔽實現(xiàn)細節(jié)的差異和提供擴展性,這一層Cache的抽象解耦了緩存的使用和緩存的后端存儲,這樣后續(xù)可以方便的更換后端存儲。
使用Spring Cache分三步:
聲明緩存
@Cacheable("books") public Book findBook(ISBN isbn) {...}
用法很簡單,在方法上添加@cacheable等注解,表示緩存該方法的結(jié)果。
當(dāng)方法有被調(diào)用時,先檢查cache中有沒有針對該方法相同參數(shù)的調(diào)用發(fā)生過,如果有,從cache中查詢并返回結(jié)果。如果沒有,則執(zhí)行具體的方法邏輯,并把結(jié)果緩存到cache中。當(dāng)然這一系列邏輯對于調(diào)用者來說都是透明的。其它的緩存操作的注解包含如下(詳細說明可參見官方文檔):
開啟Spring Cache的支持
<cache:annotation-driven />
或者使用注解@EnableCaching的方式
配置緩存后端存儲
Spring Cache提供了幾種內(nèi)置的后端存儲的實現(xiàn):下面都是CacheManager的具體實現(xiàn)。
此外,Spring Data提供了兩個緩存管理器:
假如使用memcached或者redis等分布式緩存的話,可以自己實現(xiàn)Cache和CacheManager,然后在Context里聲明即可。如果需要使用到多種不同的緩存實現(xiàn),可以用組合模式把各種不同的CacheManager封裝在一起。
緩存的key是如何生成
我們都知道緩存的存儲方式一般是key value的方式,那么在Spring cache里,key是如何被設(shè)置的呢,在這里要引入KeyGenerator,它負責(zé)key的生成策略,默認的使用SimpleKeyGenerator
能看出來,其中就是有序參數(shù)數(shù)組的hash值。當(dāng)然用戶可以自定義key生成策略。
Spring Cache的實現(xiàn)
上面是Spring cache的大致使用方式,來看是Spring是如何實現(xiàn)的。
在學(xué)習(xí)Spring源碼的時候,有兩點可以記?。?/p>
記住了這些就比較容易理解Spring中的一些組件的實現(xiàn)及運行時機制
Spring cache也不例外,它是典型的Spring AOP實現(xiàn),在Spring里,aop可以簡單的理解為代理(AspectJ除外),我們聲明了@Cacheable的方法的類,都會被代理,在代理中,實現(xiàn)緩存的查詢與設(shè)置操作。
Cache 基礎(chǔ)設(shè)施的創(chuàng)建
上一篇(Spring AOP 模塊概述)談到過,Spring AOP的創(chuàng)建過程,本質(zhì)是實現(xiàn)了一個BeanPostProcessor,在創(chuàng)建bean的過程中創(chuàng)建proxy,并且為proxy綁定所有適用于該bean的advisor,最終暴露給容器。
Spring中AOP主幾個關(guān)鍵的概念 advisor advice pointcut
advice = 切面攔截中插入的行為
pointcut = 切面的切入點
advisor = advice + pointcut
Spring cache也同樣與其它aop有類似的過程
創(chuàng)建 cache proxy
Cache的攔截行
Spring cache中生成cache代理對象使用的是CacheProxyFactoryBean工廠類。一般來說,在Spring中標(biāo)準(zhǔn)代理的創(chuàng)建都是基于ProxyFactoryBean,在這里,為了更方便的處理cache邏輯,Spring引入了CacheProxyFactoryBean來專門表示cache相關(guān)的代理,cache proxy能wrapper單例目標(biāo)對象,并且代理目標(biāo)對象實現(xiàn)的所有接口。
可以看到,在CacheProxyFactoryBean中,有個重要的屬性是CacheInterceptor,這個類是一個MethodInterceptor的實現(xiàn)類,這個類的職責(zé)是在目標(biāo)對象目標(biāo)方法上執(zhí)行具體緩存操作,這也就是上面提到的advice的職責(zé)。
繼續(xù)往下跟,return 的execute方法是父類CacheAspectSupport中的方法
在這個方法里,我們最終找到的操作緩存的最終邏輯
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對創(chuàng)新互聯(lián)的支持。
網(wǎng)站欄目:SpringCache的基本使用與實現(xiàn)原理詳解
本文URL:http://bm7419.com/article10/geijgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、搜索引擎優(yōu)化、品牌網(wǎng)站建設(shè)、手機網(wǎng)站建設(shè)、網(wǎng)站策劃、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)