SpringCache之 @CachePut的使用
使用CachePut注解,該方法每次都會執(zhí)行,會清除對應的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負責增加緩存
@Cacheable負責查詢緩存,如果沒查到,則將執(zhí)行方法,并將方法的結果增加到緩存
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關文章
關于mybatis傳入?yún)?shù)一直為null的問題
這篇文章主要介紹了關于mybatis傳入?yún)?shù)一直為null的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07Spring?Boot實現(xiàn)配置文件的自動加載和刷新功能
這篇文章我們介紹了Spring?Boot如何實現(xiàn)配置文件的自動加載和刷新,本文結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-05-05Java學習基礎之安裝JDK/配置JDK環(huán)境&IEDA工具安裝
這篇文章主要介紹了Java學習基礎系列文章的第一篇,主要內容是安裝JDK/配置JDK環(huán)境&IEDA工具安裝的相關資料,需要的朋友可以參考下2020-02-02Set接口深入剖析之HashSet、LinkedHashSet和TreeSet
這篇文章主要介紹了Set接口深入剖析之HashSet、LinkedHashSet和TreeSet,LinkedHashSet是HashSet的子類,實現(xiàn)了Set接口,LinkedHashSet底層是一個LinkedHashMap,底層維護了一個數(shù)組+雙向鏈表,需要的朋友可以參考下2023-09-09java中PreparedStatement和Statement詳細講解
這篇文章主要介紹了java中PreparedStatement和Statement詳細講解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11