一、 緩存注解有以下三個:
@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ù)對其結果進行緩存

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

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

--------------------以上部分均為網上轉載,如有侵權請及時聯(lián)系-------------
三、緩存使用例子

