摘要:理解緩存抽象緩存與緩沖區(qū)術(shù)語緩沖區(qū)和緩存往往可以互換使用,但是請注意,它們代表不同的東西。這個抽象是由和接口實(shí)現(xiàn)。要使用緩存抽象,你需要考慮兩個方面緩存聲明標(biāo)識需要緩存的方法及其策略。緩存配置存儲數(shù)據(jù)并從中讀取數(shù)據(jù)的后備緩存。
理解緩存抽象
緩存與緩沖區(qū)術(shù)語“緩沖區(qū)”和“緩存”往往可以互換使用,但是請注意,它們代表不同的東西。傳統(tǒng)上,緩沖區(qū)用作數(shù)據(jù)在快實(shí)體和慢實(shí)體之間的中間臨時存儲,由于一方必須等待另一方(這會影響性能),緩沖區(qū)允許整個數(shù)據(jù)塊(而不是小塊)同時移動,從而緩解了這種情況。數(shù)據(jù)只從緩沖區(qū)寫入和讀取一次,此外,至少有一方知道緩沖區(qū)是可見的。
另一方面,緩存根據(jù)定義是隱藏的,并且任何一方都不知道緩存的發(fā)生,它還提高了性能,但是通過讓相同的數(shù)據(jù)以快速方式多次讀取來提高性能。
你可以在這里找到關(guān)于緩沖區(qū)和緩存之間差異的進(jìn)一步解釋。
緩存抽象的核心是將緩存應(yīng)用于Java方法,從而根據(jù)緩存中可用的信息減少執(zhí)行的次數(shù),也就是說,每次調(diào)用目標(biāo)方法時,抽象都會應(yīng)用緩存行為,檢查給定參數(shù)的方法是否已經(jīng)執(zhí)行。如果已執(zhí)行,則返回緩存的結(jié)果,而不必執(zhí)行實(shí)際的方法,如果方法尚未執(zhí)行,則執(zhí)行該方法,并緩存結(jié)果并返回給用戶,以便在下次調(diào)用該方法時返回緩存的結(jié)果。這樣,對于給定的一組參數(shù),昂貴的方法(無論是CPU綁定的還是IO綁定的)只能執(zhí)行一次,并且結(jié)果可以重用,而不必實(shí)際再次執(zhí)行該方法,緩存邏輯被透明地應(yīng)用,沒有任何對調(diào)用程序的干擾。
這種方法只適用于保證為給定輸入(或參數(shù))返回相同輸出(結(jié)果)的方法,無論執(zhí)行了多少次。
緩存抽象提供了其他與緩存相關(guān)的操作,比如更新緩存內(nèi)容或刪除一個或所有條目的能力,如果緩存處理的數(shù)據(jù)在應(yīng)用程序運(yùn)行過程中可能發(fā)生更改,那么這些方法非常有用。
與其他在Spring Framework中的服務(wù),緩存服務(wù)是一個抽象(不是緩存實(shí)現(xiàn)),需要使用實(shí)際的存儲來存儲緩存數(shù)據(jù) — 也就是說,抽象使你不必寫緩存邏輯但不提供實(shí)際的數(shù)據(jù)存儲。這個抽象是由org.springframework.cache.Cache和org.springframework.cache.CacheManager接口實(shí)現(xiàn)。
Spring提供了該抽象的一些實(shí)現(xiàn):JDK 基于緩存的java.util.concurrent.ConcurrentMap、Ehcache 2.x、Gemfire緩存、Caffeine和JSR-107兼容緩存(例如Ehcache 3.x)。
緩存抽象對多線程和多進(jìn)程環(huán)境沒有特殊的處理,因為這些特性是由緩存實(shí)現(xiàn)來處理的。
如果你有一個多進(jìn)程環(huán)境(即部署在多個節(jié)點(diǎn)上的應(yīng)用程序),則需要相應(yīng)地配置緩存提供程序,根據(jù)你的用例,在多個節(jié)點(diǎn)上復(fù)制相同的數(shù)據(jù)就足夠了,但是,如果在應(yīng)用程序過程中更改數(shù)據(jù),則可能需要啟用其他傳播機(jī)制。
緩存特定的項與通過編程緩存交互找到的典型get-if-not-found-then- proceed-and-put-eventually代碼塊是直接等價的,沒有應(yīng)用鎖,幾個線程可能試圖同時加載相同的項,這同樣適用于驅(qū)逐。如果多個線程試圖同時更新或驅(qū)逐數(shù)據(jù),則可以使用陳舊數(shù)據(jù),某些緩存提供程序在該領(lǐng)域提供高級特性,有關(guān)詳細(xì)信息,請參閱緩存提供程序的文檔。
要使用緩存抽象,你需要考慮兩個方面:
緩存聲明:標(biāo)識需要緩存的方法及其策略。
緩存配置:存儲數(shù)據(jù)并從中讀取數(shù)據(jù)的后備緩存。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/76065.html
摘要:注解從版開始,的緩存抽象完全支持標(biāo)準(zhǔn)注解和以及和。使用方法調(diào)用的結(jié)果更新緩存,要求將其作為使用注解的參數(shù)傳遞給它由于這種差異,允許在實(shí)際方法調(diào)用之前或之后更新緩存。非常相似,當(dāng)方法調(diào)用導(dǎo)致異常時,支持條件驅(qū)逐。 JCache(JSR-107)注解 從4.1版開始,Spring的緩存抽象完全支持JCache標(biāo)準(zhǔn)注解:@CacheResult、@CachePut、@CacheRemove和...
摘要:聲明式基于注解的緩存對于緩存聲明,的緩存抽象提供了一組注解觸發(fā)緩存人口。重新組合要應(yīng)用于方法的多個緩存操作。雖然在大多數(shù)情況下,只聲明一個緩存,但是注解允許指定多個名稱,以便使用多個緩存。 聲明式基于注解的緩存 對于緩存聲明,Spring的緩存抽象提供了一組Java注解: @Cacheable:觸發(fā)緩存人口。 @CacheEvict:觸發(fā)緩存驅(qū)逐。 @CachePut:在不影響...
摘要:容器概述接口表示容器,負(fù)責(zé)實(shí)例化配置和組裝。基于的元數(shù)據(jù)不是惟一允許的配置元數(shù)據(jù)形式,容器本身與實(shí)際編寫配置元數(shù)據(jù)的格式完全解耦,現(xiàn)在,許多開發(fā)人員為他們的應(yīng)用程序選擇基于的配置。 容器概述 org.springframework.context.ApplicationContext接口表示Spring IoC容器,負(fù)責(zé)實(shí)例化、配置和組裝bean。容器通過讀取配置元數(shù)據(jù)獲取關(guān)于要實(shí)例化...
摘要:除了,還簡單介紹了對的支持,可以幫助應(yīng)用將散落在各處的邏輯匯集于一處切面。當(dāng)裝配的時候,這些切面能夠運(yùn)行期編織起來,這樣就能呢個非常有效的賦予新功能。 第1章 Spring之旅 說明 1、本文參考了《Spring 實(shí)戰(zhàn)》重點(diǎn)內(nèi)容,參考了GitHub上的代碼 2、每個人的學(xué)習(xí)方式不一樣,但目的是一樣的,活學(xué)活用。最近一直在聽《我們不一樣》 3、本文只為記錄作為以后參考,要想真正領(lǐng)悟Sp...
摘要:除此之外,還為不同的應(yīng)用程序體系結(jié)構(gòu)提供了基礎(chǔ)支持,包括消息傳遞事務(wù)數(shù)據(jù)和持久性以及,它還包括基于的框架,以及與之并行的反應(yīng)性框架。還支持依賴項注入和公共注解規(guī)范,應(yīng)用程序開發(fā)人員可以選擇使用這些規(guī)范,而不是提供的特定于的機(jī)制。 概述 Spring使創(chuàng)建Java企業(yè)應(yīng)用程序變得很容易,它提供了在企業(yè)環(huán)境中使用Java語言所需要的一切,支持Groovy和Kotlin作為JVM上的替代語言...
閱讀 3926·2021-11-18 13:19
閱讀 1179·2021-10-11 10:58
閱讀 3291·2019-08-29 16:39
閱讀 3140·2019-08-26 12:08
閱讀 2035·2019-08-26 11:33
閱讀 2460·2019-08-23 18:30
閱讀 1308·2019-08-23 18:21
閱讀 2522·2019-08-23 18:18