SpringCache之 @CachePut的使用
使用CachePut注解,該方法每次都會執(zhí)行,會清除對應(yīng)的key值得緩存(或者更新),
分為以下兩種情況:
如果返回值null,下次進行該key值查詢時,還會查一次數(shù)據(jù)庫,此時相當于@CacheEvict注解;
如果返回值不為null,此時會進行該key值緩存的更新,更新緩存值為返回的數(shù)據(jù);
分析:情況一返回值為null:
//使用Redis緩存 @Cacheable(value="Manager",key="#id") public User findById(Integer id) { System.out.println("---查數(shù)據(jù)庫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:
先進行數(shù)據(jù)id為1的查詢,發(fā)現(xiàn)下次查詢id為1的數(shù)據(jù)不會再查詢DB,直接走緩存;
此時進行id為1數(shù)據(jù)更新操作,并且返回值為null;
進行id為1的數(shù)據(jù)查詢,發(fā)現(xiàn)此時id為1緩存不存在,進行DB查詢;
//使用Redis緩存 @Cacheable(value="Manager",key="#id") public User findById(Integer id) { System.out.println("---查數(shù)據(jù)庫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; }
先進行數(shù)據(jù)id為1的查詢,發(fā)現(xiàn)下次查詢id為1的數(shù)據(jù)不會再查詢DB,直接走緩存;
此時進行id為1數(shù)據(jù)更新操作,返回值不為null;
進行id為1的數(shù)據(jù)查詢,發(fā)現(xiàn)此時id為1緩存被更新為更新的數(shù)據(jù),且沒有進行DB查詢操作;
補充:@CachePut和@Cacheable的區(qū)別
@CachePut負責(zé)增加緩存
@Cacheable負責(zé)查詢緩存,如果沒查到,則將執(zhí)行方法,并將方法的結(jié)果增加到緩存
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
關(guān)于mybatis傳入?yún)?shù)一直為null的問題
這篇文章主要介紹了關(guān)于mybatis傳入?yún)?shù)一直為null的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07詳解Java并發(fā)編程基礎(chǔ)之volatile
volatile作為Java多線程中輕量級的同步措施,保證了多線程環(huán)境中“共享變量”的可見性。這里的可見性簡單而言可以理解為當一個線程修改了一個共享變量的時候,另外的線程能夠讀到這個修改的值。本文將詳解介紹Java并發(fā)編程基礎(chǔ)之volatile2021-06-06Spring?Boot實現(xiàn)配置文件的自動加載和刷新功能
這篇文章我們介紹了Spring?Boot如何實現(xiàn)配置文件的自動加載和刷新,本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-05-05Java學(xué)習(xí)基礎(chǔ)之安裝JDK/配置JDK環(huán)境&IEDA工具安裝
這篇文章主要介紹了Java學(xué)習(xí)基礎(chǔ)系列文章的第一篇,主要內(nèi)容是安裝JDK/配置JDK環(huán)境&IEDA工具安裝的相關(guān)資料,需要的朋友可以參考下2020-02-02Java編程實現(xiàn)多線程TCP服務(wù)器完整實例
這篇文章主要介紹了Java編程實現(xiàn)多線程TCP服務(wù)器完整實例,具有一定借鑒價值,需要的朋友可以參考下2018-01-01Set接口深入剖析之HashSet、LinkedHashSet和TreeSet
這篇文章主要介紹了Set接口深入剖析之HashSet、LinkedHashSet和TreeSet,LinkedHashSet是HashSet的子類,實現(xiàn)了Set接口,LinkedHashSet底層是一個LinkedHashMap,底層維護了一個數(shù)組+雙向鏈表,需要的朋友可以參考下2023-09-09java中PreparedStatement和Statement詳細講解
這篇文章主要介紹了java中PreparedStatement和Statement詳細講解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11