Spring中緩存注解@Cache的使用詳解
緩存注解
緩存注解有以下三個:
- @Cacheable
- @CacheEvict
- @CachePut
@Cacheable(value=”accountCache”),這個注釋的意思是,當調(diào)用這個方法的時候,會從一個名叫 accountCache 的緩存中查詢
如果沒有,則執(zhí)行實際的方法(即查詢數(shù)據(jù)庫),并將執(zhí)行的結(jié)果存入緩存中,否則返回緩存中的對象。
這里的緩存中的 key 就是參數(shù) userName,value 就是 Account 對象。“accountCache”緩存是在 spring*.xml 中定義的名稱。
示例:
Java代碼
@Cacheable(value="accountCache")// 使用了一個緩存名叫 accountCache
public Account getAccountByName(String userName) {
// 方法內(nèi)部實現(xiàn)不考慮緩存邏輯,直接實現(xiàn)業(yè)務(wù)
System.out.println("real query account."+userName);
return getFromDB(userName);
} @CacheEvict 注釋來標記要清空緩存的方法,當這個方法被調(diào)用后,即會清空緩存。注意其中一個 @CacheEvict(value=”accountCache”,key=”#account.getName()”),其中的 Key 是用來指定緩存的 key 的,這里因為我們保存的時候用的是 account 對象的 name 字段,所以這里還需要從參數(shù) account 對象中獲取 name 的值來作為 key,前面的 # 號代表這是一個 SpEL 表達式,此表達式可以遍歷方法的參數(shù)對象,具體語法可以參考 Spring 的相關(guān)文檔手冊。
示例:
Java代碼
@CacheEvict(value="accountCache",key="#account.getName()")// 清空accountCache 緩存
public void updateAccount(Account account) {
updateDB(account);
}
@CacheEvict(value="accountCache",allEntries=true)// 清空accountCache 緩存
public void reload() {
reloadAll()
}
@Cacheable(value="accountCache",condition="#userName.length() <=4")// 緩存名叫 accountCache
public Account getAccountByName(String userName) {
// 方法內(nèi)部實現(xiàn)不考慮緩存邏輯,直接實現(xiàn)業(yè)務(wù)
return getFromDB(userName);
} @CachePut 注釋,這個注釋可以確保方法被執(zhí)行,同時方法的返回值也被記錄到緩存中,實現(xiàn)緩存與數(shù)據(jù)庫的同步更新。
示例:
Java代碼
@CachePut(value="accountCache",key="#account.getName()")// 更新accountCache 緩存
public Account updateAccount(Account account) {
return updateDB(account);
} @Cacheable、@CachePut、@CacheEvict 注解介紹
通過上面的例子,我們可以看到 spring cache 主要使用兩個注解標簽,即 @Cacheable、@CachePut 和 @CacheEvict,我們總結(jié)一下其作用和配置方法。
@Cacheable 作用和配置方法
@Cacheable 的作用主要針對方法配置,能夠根據(jù)方法的請求參數(shù)對其結(jié)果進行緩存

@CachePut 作用和配置方法
@CachePut 的作用主要針對方法配置,能夠根據(jù)方法的請求參數(shù)對其結(jié)果進行緩存,和 @Cacheable 不同的是,它每次都會觸發(fā)真實方法的調(diào)用

@CacheEvict 作用和配置方法
@CachEvict 的作用主要針對方法配置,能夠根據(jù)一定的條件對緩存進行清空

到此這篇關(guān)于Spring中緩存注解@Cache的使用詳解的文章就介紹到這了,更多相關(guān)Spring中的@Cache內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java鎖機制synchronized與ReentrantLock全方面解析
本文深入解析了Java并發(fā)編程中的鎖機制,重點對比了synchronized和ReentrantLock,synchronized是Java內(nèi)置鎖,基于Monitor對象實現(xiàn),文章通過代碼示例和源碼分析,幫助讀者更好地理解這兩者的區(qū)別和適用場景,感興趣的朋友跟隨小編一起看看吧2026-02-02
Spring Boot使用Spring的異步線程池的實現(xiàn)
這篇文章主要介紹了Spring Boot使用Spring的異步線程池的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-02-02
spring cloud gateway跨域全局CORS配置方式
這篇文章主要介紹了spring cloud gateway跨域全局CORS配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
java 如何往已經(jīng)存在的excel表格里面追加數(shù)據(jù)的方法
這篇文章主要介紹了java 如何往已經(jīng)存在的excel表格里面追加數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08
SpringBoot啟動后的初始化數(shù)據(jù)加載原理解析與實戰(zhàn)
本文主要圍繞?Spring?Boot?啟動后的初始化數(shù)據(jù)加載展開,介紹了初始化任務(wù)的基本需求,包括全局配置加載、數(shù)據(jù)庫表初始化等,闡述了多種初始化加載方式,分析了它們的優(yōu)缺點,需要的朋友可以參考下2024-11-11
idea使用mybatis插件mapper中的方法爆紅的解決方案
這篇文章主要介紹了idea使用mybatis插件mapper中的方法爆紅的解決方案,文中給出了詳細的原因分析和解決方案,對大家解決問題有一定的幫助,需要的朋友可以參考下2024-07-07

