Spring緩存注解@Cache使用

一、 緩存注解有以下三個:

@Cacheable
@CacheEvict
@CachePut

@Cacheable(value=”accountCache”),這個注釋的意思是,當(dāng)調(diào)用這個方法的時候,會從一個名叫 accountCache 的緩存中查詢,如果沒有,則執(zhí)行實際的方法(即查詢數(shù)據(jù)庫),并將執(zhí)行的結(jié)果存入緩存中,否則返回緩存中的對象。這里的緩存中的 key 就是參數(shù) userName,value 就是 Account 對象?!癮ccountCache”緩存是在 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 注釋來標(biāo)記要清空緩存的方法,當(dāng)這個方法被調(diào)用后,即會清空緩存。注意其中一個 @CacheEvict(value=”accountCache”,key=”#account.getName()”),其中的 Key 是用來指定緩存的 key 的,這里因為我們保存的時候用的是 account 對象的 name 字段,所以這里還需要從參數(shù) account 對象中獲取 name 的值來作為 key,前面的 # 號代表這是一個 SpEL 表達(dá)式,此表達(dá)式可以遍歷方法的參數(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 主要使用兩個注釋標(biāo)簽,即 @Cacheable、@CachePut 和 @CacheEvict,我們總結(jié)一下其作用和配置方法。

表 1. @Cacheable 作用和配置方法

@Cacheable 的作用 主要針對方法配置,能夠根據(jù)方法的請求參數(shù)對其結(jié)果進(jìn)行緩存

@Cacheable增加緩存

表 2. @CachePut 作用和配置方法

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

@CachePut緩存結(jié)果,出發(fā)方法調(diào)用

表 3. @CacheEvict 作用和配置方法

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

@CachEvict清除緩存

--------------------以上部分均為網(wǎng)上轉(zhuǎn)載,如有侵權(quán)請及時聯(lián)系-------------

三、緩存使用例子

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

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,715評論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,290評論 6 342
  • 本文轉(zhuǎn)自被遺忘的博客 Spring Cache 緩存是實際工作中非常常用的一種提高性能的方法, 我們會在許多場景下...
    quiterr閱讀 1,212評論 0 8
  • 大街上 無數(shù)的煩燥 將天空攪擾得沒有光彩 我自己也深深地不安 二十一年前 苦喊著踏進(jìn)人世的風(fēng)塵 開始 痛苦和不痛苦...
    東長愨人閱讀 520評論 0 6
  • 馮哥,你還來上自習(xí)嗎? 高中學(xué)校周圍的網(wǎng)吧的格局,和別處是差不多的:都是一個長長的柜臺,里面好多臺電腦,除了景兒,...
    白頭路長安夢閱讀 231評論 0 0

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