一、@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 一致。

 

 

 

 

posted on 2021-12-25 16:11  格物致知_Tony  阅读(1079)  评论(0编辑  收藏  举报