一、@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 一致。
分类:
SpringBoot
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战