国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Spring Cache的基本使用與實(shí)現(xiàn)原理詳解

Spring Cache的基本使用與實(shí)現(xiàn)原理詳解

2021-04-26 14:30張濤 Java教程

緩存是實(shí)際工作中非經(jīng)常常使用的一種提高性能的方法, 我們會(huì)在很多場景下來使用緩存。下面這篇文章主要給大家介紹了關(guān)于Spring Cache的基本使用與實(shí)現(xiàn)原理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

spring cache 概念

從spring 3.1版本開始,提供了一種透明的方式來為現(xiàn)有的spring 應(yīng)用添加cache,使用起來就像@transaction一樣。在應(yīng)用層面與后端存儲(chǔ)之間,提供了一層抽象,這層抽象目的在于封裝各種可插拔的后端存儲(chǔ)( ehcache guava redis),最小化因?yàn)榫彺娼o現(xiàn)有業(yè)務(wù)代碼帶來的侵入。

spring 的緩存技術(shù)還具備相當(dāng)?shù)撵`活性。不僅能夠使用 spel(spring expression language)來定義緩存的 key 和各種 condition,還提供開箱即用的緩存暫時(shí)存儲(chǔ)方案,也支持和主流的專業(yè)緩存比如 ehcache 集成。

其特點(diǎn)總結(jié)例如以下:

  • 通過少量的配置 annotation 凝視就可以使得既有代碼支持緩存
  • 支持開箱即用 out-of-the-box,即不用安裝和部署額外第三方組件就可以使用緩存
  • 支持 spring express language,能使用對象的不論什么屬性或者方法來定義緩存的 key 和 condition
  • 支持 aspectj,并通過事實(shí)上現(xiàn)不論什么方法的緩存支持
  • 支持自己定義 key 和自己定義緩存管理者,具有相當(dāng)?shù)撵`活性和擴(kuò)展性

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

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

org.springframework.cache.cachemanager

cache代表緩存本身

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

使用spring cache分三步:

  • 聲明緩存
  • 開啟spring的cache功能
  • 配置后端的存儲(chǔ)

聲明緩存

?
1
2
@cacheable("books")
public book findbook(isbn isbn) {...}

用法很簡單,在方法上添加@cacheable等注解,表示緩存該方法的結(jié)果。

當(dāng)方法有被調(diào)用時(shí),先檢查cache中有沒有針對該方法相同參數(shù)的調(diào)用發(fā)生過,如果有,從cache中查詢并返回結(jié)果。如果沒有,則執(zhí)行具體的方法邏輯,并把結(jié)果緩存到cache中。當(dāng)然這一系列邏輯對于調(diào)用者來說都是透明的。其它的緩存操作的注解包含如下(詳細(xì)說明可參見官方文檔):

  • @cacheable triggers cache population
  • @cacheevict triggers cache eviction
  • @cacheput updates the cache without interfering with the method execution
  • @caching regroups multiple cache operations to be applied on a method
  • @cacheconfig shares some common cache-related settings at class-level

開啟spring cache的支持

?
1
<cache:annotation-driven />

或者使用注解@enablecaching的方式

配置緩存后端存儲(chǔ)

spring cache提供了幾種內(nèi)置的后端存儲(chǔ)的實(shí)現(xiàn):下面都是cachemanager的具體實(shí)現(xiàn)。

Spring Cache的基本使用與實(shí)現(xiàn)原理詳解

此外,spring data提供了兩個(gè)緩存管理器:

  • rediscachemanager(來自于spring data redis項(xiàng)目)
  • gmfirecachemanager(來自于spring data gemfire項(xiàng)目

假如使用memcached或者redis等分布式緩存的話,可以自己實(shí)現(xiàn)cache和cachemanager,然后在context里聲明即可。如果需要使用到多種不同的緩存實(shí)現(xiàn),可以用組合模式把各種不同的cachemanager封裝在一起。

Spring Cache的基本使用與實(shí)現(xiàn)原理詳解

緩存的key是如何生成

我們都知道緩存的存儲(chǔ)方式一般是key value的方式,那么在spring cache里,key是如何被設(shè)置的呢,在這里要引入keygenerator,它負(fù)責(zé)key的生成策略,默認(rèn)的使用simplekeygenerator

Spring Cache的基本使用與實(shí)現(xiàn)原理詳解

Spring Cache的基本使用與實(shí)現(xiàn)原理詳解

能看出來,其中就是有序參數(shù)數(shù)組的hash值。當(dāng)然用戶可以自定義key生成策略。

spring cache的實(shí)現(xiàn)

上面是spring cache的大致使用方式,來看是spring是如何實(shí)現(xiàn)的。

在學(xué)習(xí)spring源碼的時(shí)候,有兩點(diǎn)可以記住:

  • 大多數(shù)高級功能的實(shí)現(xiàn)都依賴spring aop
  • 大多數(shù)功能的組裝時(shí)機(jī)都依賴sprin bean生命周期中的幾個(gè)回調(diào)接口

記住了這些就比較容易理解spring中的一些組件的實(shí)現(xiàn)及運(yùn)行時(shí)機(jī)制

spring cache也不例外,它是典型的spring aop實(shí)現(xiàn),在spring里,aop可以簡單的理解為代理(aspectj除外),我們聲明了@cacheable的方法的類,都會(huì)被代理,在代理中,實(shí)現(xiàn)緩存的查詢與設(shè)置操作。

cache 基礎(chǔ)設(shè)施的創(chuàng)建

上一篇(spring aop 模塊概述)談到過,spring aop的創(chuàng)建過程,本質(zhì)是實(shí)現(xiàn)了一個(gè)beanpostprocessor,在創(chuàng)建bean的過程中創(chuàng)建proxy,并且為proxy綁定所有適用于該bean的advisor,最終暴露給容器。

spring中aop主幾個(gè)關(guān)鍵的概念 advisor  advice pointcut

advice = 切面攔截中插入的行為

pointcut = 切面的切入點(diǎn)

advisor = advice + pointcut

spring cache也同樣與其它aop有類似的過程

創(chuàng)建 cache proxy

  • 由infrastructureadvisorautoproxycreator負(fù)責(zé)的,它實(shí)現(xiàn)beanpostprocessor所以可以在bean實(shí)例化返回給容器前有機(jī)會(huì)創(chuàng)建代理,它又繼承了abstractadvisorautoproxycreator,所以又具備了給代理類綁定advisor的能力。
  • pointcut的職責(zé)是由cacheoperationsourcepointcut完成的,它主要是通過方法上的cache相關(guān)的注解來判斷匹配是否需要切入

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)對象實(shí)現(xiàn)的所有接口。

Spring Cache的基本使用與實(shí)現(xiàn)原理詳解

可以看到,在cacheproxyfactorybean中,有個(gè)重要的屬性是cacheinterceptor,這個(gè)類是一個(gè)methodinterceptor的實(shí)現(xiàn)類,這個(gè)類的職責(zé)是在目標(biāo)對象目標(biāo)方法上執(zhí)行具體緩存操作,這也就是上面提到的advice的職責(zé)。

Spring Cache的基本使用與實(shí)現(xiàn)原理詳解

繼續(xù)往下跟,return 的execute方法是父類cacheaspectsupport中的方法

Spring Cache的基本使用與實(shí)現(xiàn)原理詳解

在這個(gè)方法里,我們最終找到的操作緩存的最終邏輯

  • 判斷緩存條件
  • 獲取key
  • 獲取cache
  • 最終調(diào)用cache.get(key, callable)方法,第二個(gè)參數(shù)是一個(gè)回調(diào),用于處理沒有命中緩存的情況:
    if cached, return; otherwise create, cache and return

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對服務(wù)器之家的支持。

原文鏈接:https://mp.weixin.qq.com/s/mgC190U08WDIUEFEFM-1SA

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91精品国产91久久久久久 | 黄色最新网站 | 亚洲综合一区二区三区 | 欧美自拍一区 | 69久久久久久 | 日韩国产精品一区二区三区 | 性色视频免费观看 | 国产大片在线观看 | 精品粉嫩超白一线天av | 国产不卡精品视频 | 伊人网站 | 黄色在线观看网址 | 国产免费久久 | 91精品国产综合久久香蕉的用户体验 | 日本免费在线视频 | 激情在线观看视频 | 日本成人中文字幕 | 婷婷国产成人精品视频 | 中文字幕在线观看视频地址二 | 在线影院av | 久久精品中文 | 激情欧美一区二区免费视频 | 激情网页| 青青久草在线 | 天天干天天操天天干 | 亚洲精品第一页 | 精品久久久久一区二区国产 | 欧美影| 精品久久久久久亚洲综合网 | 亚洲 欧美 日韩 在线 | 中文字幕一区在线观看视频 | 奇米亚洲午夜久久精品 | 日韩久久久久久 | 欧美激情综合五月色丁香小说 | 久久中文字幕一区 | 在线不卡视频 | 精品欧美一区二区三区久久久 | 欧美电影在线观看 | 日韩免费一区二区 | 午夜影视 | 最近2018年手机中文字幕版 |