第九章:(3)Spring Boot 与 缓存 之 @CachePut 注解

摘要:
运行时机: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为什么是没有更新前的?

一、@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 
    publicEmployee getEmpById(Integer id) {
        System.out.println("查询" + id +"号员工");
        returnemployeeMapper.getEmpById(id);
    }

  2、更新员工

@CachePut(value = {"emp"}, key = "#result.id")  
    publicEmployee updateEmp(Employee emp) {
        System.out.println("updateEmp:" +emp);
        Integer result =employeeMapper.updateEmp(emp);
        returnemp;
    }

使用 @CachePut 生效,必须要与存放缓存的 key 一致。

免责声明:文章转载自《第九章:(3)Spring Boot 与 缓存 之 @CachePut 注解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇APP测试点总结(功能,交互,死机崩溃状态分析,容易出错的检查点)使用VSCode创建Asp.Net Core下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

用Python给Github的README.md做一个访客统计功能

README.md 是每一个 Github 项目必不可少的文件,用户打开你的项目链接第一眼看到的就是它。如果可以给这个文件添加一个访客统计功能,那么不就知道每天有多少个用户或者一共有多少个用户打开过你的项目了吗? 答案是肯定的,但是因为普通的访客统计系统都需要在 HTML 页面中用 <script> 标签引入一个 js 文件, 而 Githu...

jQuery缓存数据

很多同学在项目中都喜欢将数据存储在HTMLElement属性上,如 1 2 3 4 <div data="some data">Test</div> <script> div.getAttribute('data');// some data </script> 给页面中div添加了自定义...

Java内存管理的小技巧

1.尽量使用直接量     当需要使用字符串,还有Byte,Short,Long,Float,Double,Boolean,Character包装类的实例时,程序不应该采用New的方式来创建对象,而应该直接采用直接量来创建它们,程序需要“hello”字符串时,应该采用String str=“hello”;如果以上述方式创建字符串,JVM的字符串缓存池会缓存...

文件系统中对页高速缓存的操作

本文从read函数入手,主要讲述从页缓冲,一直到具体的块请求被提交给块设备驱动程序的过程,以下是本文讲述的一张概图,也是对本文的一个概括,可以结合本图,首先由一个从全局上有个清楚的认识,然后再去查看具体的代码,当然本文只是从大体流程上对页缓冲的处理流程进行分析,还有很多小的细节没有搞清楚,后面还需要继续研究。 1.具体文件系统 我们知道通用文件系统也就是虚...

C#编程中关于数据缓存的经验总结一直以来,

C#编程中关于数据缓存的经验总结一直以来,我都发现程序的运行速度不够理想。通过查代码,发现程序对数据库的访问非常频繁,而且检索出来的数据量比较大。为了让程序运行快起来,我想对程序采用适当的缓存方法。我在C#尝试了5种方法进行数据缓存,具体如下:(如有遗漏,错误欢迎大家指正,欢迎提建议。)1:Session方法:此方法是针对于每个用户来的,如果用户量比较大,...

【Java虚拟机4】Java内存模型(硬件层面的并发优化基础知识--缓存一致性问题)

前言 今天学习了Java内存模型第一课的视频,讲了硬件层面的知识,还是和大学时一样,醍醐灌顶。老师讲得太好了。 Java内存模型,感觉以前学得比较抽象。很繁杂,抽象。 这次试着系统一点跟着2个老师学习一下。 学习Java内存模型目的: 1.高并发情况下,java内存模型是怎么提供支持的? 2.一个对象创建后,在内存中的布局? 为什么在聊JVM内存模型、ha...