随笔 - 1162  文章 - 0  评论 - 16  阅读 - 59万 

一、@CachePut

  @CachePut:既调用方法,又更新缓存数据,同步更新缓存,修改了数据库的某个数据,同时更新缓存。
  注意:存取使用的 key 必须是同一个。

  运行时机
    1、先调用目标方法
    2、将目标方法的结果缓存起来

  测试步骤:

    1、先查询1号员工,查到的结果会放到缓存中

1
2
key:id=1 的参数
value: 1号员工

  

    2、以后查询还是之前缓存中的结果
    3、更新1号员工
       将方法的返回值也放进缓存了:

1
2
key:传入参数 employee 对象
value:返回的 employee 对象

  

    4、再来查询1号员工
     应该是更新后的员工

1
2
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   格物致知_Tony  阅读(1095)  评论(0编辑  收藏  举报
编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示

目录导航