SpringCache之 @CachePut的使用
使用CachePut注解,該方法每次都會(huì)執(zhí)行,會(huì)清除對(duì)應(yīng)的key值得緩存(或者更新),
分為以下兩種情況:
如果返回值null,下次進(jìn)行該key值查詢時(shí),還會(huì)查一次數(shù)據(jù)庫(kù),此時(shí)相當(dāng)于@CacheEvict注解;
如果返回值不為null,此時(shí)會(huì)進(jìn)行該key值緩存的更新,更新緩存值為返回的數(shù)據(jù);
分析:情況一返回值為null:
//使用Redis緩存
@Cacheable(value="Manager",key="#id")
public User findById(Integer id) {
System.out.println("---查數(shù)據(jù)庫(kù)DB-----");
return userMapper.selectByPrimaryKey(id);
}
@CachePut(value="Manager",key="#manager.getId()")
//@CacheEvict(value="Manager",key="#manager.getId()")//清除數(shù)據(jù)
public User update(User manager) {
userMapper.updateByPrimaryKeySelective(manager);
//return userMapper.selectByPrimaryKey(manager.getId());
return null;
}
情況二返回值不為null:
先進(jìn)行數(shù)據(jù)id為1的查詢,發(fā)現(xiàn)下次查詢id為1的數(shù)據(jù)不會(huì)再查詢DB,直接走緩存;
此時(shí)進(jìn)行id為1數(shù)據(jù)更新操作,并且返回值為null;
進(jìn)行id為1的數(shù)據(jù)查詢,發(fā)現(xiàn)此時(shí)id為1緩存不存在,進(jìn)行DB查詢;
//使用Redis緩存
@Cacheable(value="Manager",key="#id")
public User findById(Integer id) {
System.out.println("---查數(shù)據(jù)庫(kù)DB-----");
return userMapper.selectByPrimaryKey(id);
}
@CachePut(value="Manager",key="#manager.getId()")
//@CacheEvict(value="Manager",key="#manager.getId()")//清除數(shù)據(jù)
public User update(User manager) {
userMapper.updateByPrimaryKeySelective(manager);
return userMapper.selectByPrimaryKey(manager.getId());
//return null;
}
先進(jìn)行數(shù)據(jù)id為1的查詢,發(fā)現(xiàn)下次查詢id為1的數(shù)據(jù)不會(huì)再查詢DB,直接走緩存;
此時(shí)進(jìn)行id為1數(shù)據(jù)更新操作,返回值不為null;
進(jìn)行id為1的數(shù)據(jù)查詢,發(fā)現(xiàn)此時(shí)id為1緩存被更新為更新的數(shù)據(jù),且沒有進(jìn)行DB查詢操作;
補(bǔ)充:@CachePut和@Cacheable的區(qū)別
@CachePut負(fù)責(zé)增加緩存
@Cacheable負(fù)責(zé)查詢緩存,如果沒查到,則將執(zhí)行方法,并將方法的結(jié)果增加到緩存
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
詳解MyEclipse中搭建spring-boot+mybatis+freemarker框架
這篇文章主要介紹了詳解MyEclipse中搭建spring-boot+mybatis+freemarker框架,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10
利用Java多線程技術(shù)導(dǎo)入數(shù)據(jù)到Elasticsearch的方法步驟
這篇文章主要介紹了利用Java多線程技術(shù)導(dǎo)入數(shù)據(jù)到Elasticsearch的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
SpringBoot實(shí)現(xiàn)Word轉(zhuǎn)PDF和TXT的實(shí)踐分享
研發(fā)工作中難免會(huì)遇到一些奇奇怪怪的需求,就比如最近,客戶提了個(gè)新需求:上傳一個(gè)WORD文檔,要求通過系統(tǒng)把該文檔轉(zhuǎn)換成PDF和TXT,所以本文給大家分享了SpringBoot實(shí)現(xiàn)Word轉(zhuǎn)PDF和TXT的實(shí)踐,感興趣的朋友可以參考下2024-08-08
java Split 實(shí)現(xiàn)去除一個(gè)空格和多個(gè)空格
這篇文章主要介紹了java Split 實(shí)現(xiàn)去除一個(gè)空格和多個(gè)空格,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-10-10
Mybatis常用分頁(yè)插件實(shí)現(xiàn)快速分頁(yè)處理技巧
這篇文章主要介紹了Mybatis常用分頁(yè)插件實(shí)現(xiàn)快速分頁(yè)處理的方法。非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起看看2016-10-10

