一癞季、 緩存注解有以下三個:
@Cacheable
@CacheEvict
@CachePut
@Cacheable(value=”accountCache”)劫瞳,這個注釋的意思是倘潜,當(dāng)調(diào)用這個方法的時候,會從一個名叫 accountCache 的緩存中查詢志于,如果沒有涮因,則執(zhí)行實(shí)際的方法(即查詢數(shù)據(jù)庫),并將執(zhí)行的結(jié)果存入緩存中恨憎,否則返回緩存中的對象蕊退。這里的緩存中的 key 就是參數(shù) userName,value 就是 Account 對象憔恳∪坷螅“accountCache”緩存是在 spring*.xml 中定義的名稱。
示例:
Java代碼
@Cacheable(value="accountCache")// 使用了一個緩存名叫 accountCache
public Account getAccountByName(String userName) {
// 方法內(nèi)部實(shí)現(xiàn)不考慮緩存邏輯钥组,直接實(shí)現(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 的,這里因?yàn)槲覀儽4娴臅r候用的是 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)部實(shí)現(xiàn)不考慮緩存邏輯,直接實(shí)現(xiàn)業(yè)務(wù)
return getFromDB(userName);
}
***@CachePut ***注釋匀泊,這個注釋可以確保方法被執(zhí)行优训,同時方法的返回值也被記錄到緩存中,實(shí)現(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)行緩存
表 2. @CachePut 作用和配置方法
@CachePut 的作用 主要針對方法配置腺逛,能夠根據(jù)方法的請求參數(shù)對其結(jié)果進(jìn)行緩存,和 @Cacheable 不同的是衡怀,它每次都會觸發(fā)真實(shí)方法的調(diào)用
表 3. @CacheEvict 作用和配置方法
@CachEvict 的作用 主要針對方法配置安疗,能夠根據(jù)一定的條件對緩存進(jìn)行清空
--------------------以上部分均為網(wǎng)上轉(zhuǎn)載,如有侵權(quán)請及時聯(lián)系-------------
三够委、緩存使用例子