SpringCache之 @CachePut的使用
使用CachePut註解,該方法每次都會執行,會清除對應的key值得緩存(或者更新),
分為以下兩種情況:
如果返回值null,下次進行該key值查詢時,還會查一次數據庫,此時相當於@CacheEvict註解;
如果返回值不為null,此時會進行該key值緩存的更新,更新緩存值為返回的數據;
分析:情況一返回值為null:
//使用Redis緩存 @Cacheable(value="Manager",key="#id") public User findById(Integer id) { System.out.println("---查數據庫DB-----"); return userMapper.selectByPrimaryKey(id); } @CachePut(value="Manager",key="#manager.getId()") //@CacheEvict(value="Manager",key="#manager.getId()")//清除數據 public User update(User manager) { userMapper.updateByPrimaryKeySelective(manager); //return userMapper.selectByPrimaryKey(manager.getId()); return null; }
情況二返回值不為null:
先進行數據id為1的查詢,發現下次查詢id為1的數據不會再查詢DB,直接走緩存;
此時進行id為1數據更新操作,並且返回值為null;
進行id為1的數據查詢,發現此時id為1緩存不存在,進行DB查詢;
//使用Redis緩存 @Cacheable(value="Manager",key="#id") public User findById(Integer id) { System.out.println("---查數據庫DB-----"); return userMapper.selectByPrimaryKey(id); } @CachePut(value="Manager",key="#manager.getId()") //@CacheEvict(value="Manager",key="#manager.getId()")//清除數據 public User update(User manager) { userMapper.updateByPrimaryKeySelective(manager); return userMapper.selectByPrimaryKey(manager.getId()); //return null; }
先進行數據id為1的查詢,發現下次查詢id為1的數據不會再查詢DB,直接走緩存;
此時進行id為1數據更新操作,返回值不為null;
進行id為1的數據查詢,發現此時id為1緩存被更新為更新的數據,且沒有進行DB查詢操作;
補充:@CachePut和@Cacheable的區別
@CachePut負責增加緩存
@Cacheable負責查詢緩存,如果沒查到,則將執行方法,並將方法的結果增加到緩存
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。
推薦閱讀:
- Spring @Cacheable註解中key的使用詳解
- SpringBoot詳解整合Redis緩存方法
- Spring緩存註解@Cacheable @CacheEvit @CachePut使用介紹
- SpringBoot詳解整合Spring Cache實現Redis緩存流程
- SpringBoot如何使用@Cacheable進行緩存與取值