Spring緩存注解@Cache使用

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

@Cacheable
@CacheEvict
@CachePut

@Cacheable(value=”accountCache”),這個注釋的意思是,當調用這個方法的時候,會從一個名叫 accountCache 的緩存中查詢,如果沒有,則執(zhí)行實際的方法(即查詢數(shù)據庫),并將執(zhí)行的結果存入緩存中,否則返回緩存中的對象。這里的緩存中的 key 就是參數(shù) userName,value 就是 Account 對象?!癮ccountCache”緩存是在 spring*.xml 中定義的名稱。

示例:
Java代碼

@Cacheable(value="accountCache")// 使用了一個緩存名叫 accountCache   
public Account getAccountByName(String userName) {  
     // 方法內部實現(xiàn)不考慮緩存邏輯,直接實現(xiàn)業(yè)務  
     System.out.println("real query account."+userName);   
     return getFromDB(userName);   
}   

@CacheEvict 注釋來標記要清空緩存的方法,當這個方法被調用后,即會清空緩存。注意其中一個 @CacheEvict(value=”accountCache”,key=”#account.getName()”),其中的 Key 是用來指定緩存的 key 的,這里因為我們保存的時候用的是 account 對象的 name 字段,所以這里還需要從參數(shù) account 對象中獲取 name 的值來作為 key,前面的 # 號代表這是一個 SpEL 表達式,此表達式可以遍歷方法的參數(shù)對象,具體語法可以參考 Spring 的相關文檔手冊。

示例:
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) {   
 // 方法內部實現(xiàn)不考慮緩存邏輯,直接實現(xiàn)業(yè)務  
 return getFromDB(userName);   
}  

***@CachePut ***注釋,這個注釋可以確保方法被執(zhí)行,同時方法的返回值也被記錄到緩存中,實現(xiàn)緩存與數(shù)據庫的同步更新。

示例:
Java代碼

@CachePut(value="accountCache",key="#account.getName()")// 更新accountCache 緩存  
public Account updateAccount(Account account) {   
   return updateDB(account);   
}   
二、@Cacheable、@CachePut、@CacheEvict 注釋介紹

通過上面的例子,我們可以看到 spring cache 主要使用兩個注釋標簽,即 @Cacheable、@CachePut 和 @CacheEvict,我們總結一下其作用和配置方法。

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

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

@Cacheable增加緩存

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

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

@CachePut緩存結果,出發(fā)方法調用

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

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

@CachEvict清除緩存

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

三、緩存使用例子

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

相關閱讀更多精彩內容

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

友情鏈接更多精彩內容