一、@CachePut
@CachePut:既調用方法,又更新緩存數據,同步更新緩存,修改了數據庫的某個數據,同時更新緩存。
注意:存取使用的 key 必須是同一個。
運行時機:
1、先調用目標方法
2、將目標方法的結果緩存起來
測試步驟:
1、先查詢1號員工,查到的結果會放到緩存中
key:id=1 的參數
value: 1號員工
2、以后查詢還是之前緩存中的結果
3、更新1號員工
將方法的返回值也放進緩存了:
key:傳入參數 employee 對象
value:返回的 employee 對象
4、再來查詢1號員工
應該是更新后的員工
key = "#emp.id" ,使用傳入的參數的 id 進行更新
key = "#result.id" 參數與返回值一樣
注意:@Cacheable 的 key 不能用 #result【要先用key去緩存中查詢】
為什么是沒有更新前的? 【1號員工沒有在緩存中更新,使用的 key 不一樣】
二、示例代碼
1、查詢員工
@Cacheable(cacheNames = {"emp"}) //默認的key就是參數 id public Employee getEmpById(Integer id) { System.out.println("查詢" + id +"號員工"); return employeeMapper.getEmpById(id); }
2、更新員工
@CachePut(value = {"emp"}, key = "#result.id") public Employee updateEmp(Employee emp) { System.out.println("updateEmp:" + emp); Integer result = employeeMapper.updateEmp(emp); return emp; }
使用 @CachePut 生效,必須要與存放緩存的 key 一致。