其他分享
首页 > 其他分享> > 雷丰阳springboot之缓存之重要注解

雷丰阳springboot之缓存之重要注解

作者:互联网

目录

@CachePut

@CachePut如果标注在方法上的话,就是表示既可以调用这个方法,又更新了缓存数据的。

这个使用的场景就是,我们修改了数据库的某个数据,同步地也要更新我们的缓存。

这样的话,别人再要查相同的数据,就不用去数据库当中再查一遍了。

@Cacheable是在方法调用之前,看看缓存当中,有没有key相关的数据,如果有,就不调用方法了,如果没有就调用方法,并且把方法返回的结果就放到了缓存当中了。

@CachePut是我们直接先调用方法,调用完了方法之后呢,我们直接把方法返回的结果放到了缓存当中的。

修改service

image-20210503161057920

我们可以看到@CachePut里面的这些属性,和@Cacheable这些都是比较一样的。

image-20210503161116227

image-20210503161254946

修改controller

image-20210503161406141

测试一下

第一步

先来查询一个员工:

image-20210503161551665

image-20210503161611803

第二步

查询1号员工,查询到的结果,会放置在缓存当中的。

以后查询,还是之前的结果的。

第三步

这个时候,我们想要更新一下员工的信息:

image-20210503161842904

我们在更新的时候,我们把员工的名字,更新成为了zhangsan,以及,我们把gender更新为了0。

第四步

如果这个时候,我们再来进行查询1号员工,应该是什么呢?

从理论上来说,应该是,我们更新后的员工信息,这样的话,才会比较符合我们的业务逻辑的。

image-20210503162731824

但是我们重新查询了一下,发现,TMD,居然还是原来的信息,还是缓存当中的原来的信息?!!

出事了,这是怎么回事呢?

我们查询出来的数据,是我们没有更新之前的缓存的数据呢。

为什么是这样子呢?

这是因为第一步的过程中,我们查询数据的时候,我们查询到的结果放到了缓存当中,我们是用key-value的方式来放置结果的。

我们的key使用的是参数的值,就是id。

image-20210503163116569

但是我们更新员工的情况,@CachePut方法更新的员工放到缓存当中的key和值是:

image-20210503163220146

统一一下查询和更新的key

我们需要统一指定一下key的。

image-20210503163309992

image-20210503163348000

再测试一下

先查询一下:

image-20210503163520336

更新一下数据:

image-20210503163558871

再查询一下数据:

image-20210503163631504

此时查看控制台,发现是没有查询数据库的哦。

image-20210503163702304

所以这里,CachePut达到了同步更新缓存的目的。

马敏兰(旗袍美探)- 徐筠

image-20210503160201355

image-20210503160224962

徐筠

谁都不会想到,这样一个女人,会对spring的缓存有如此深的理解。

顾采薇(上阳赋)- 孙嘉璐

顾采薇

顾采薇-2

顾采薇-3

顾采薇-4

顾采薇-5

顾采薇-6

顾采薇-7

image-20210503164523954

@CacheEvict 缓存清除

修改service

image-20210503164929537

修改controller

image-20210503165029998

启动项目测试

发送一个删除的请求:

image-20210503165132488

控制台也是打印删除的信息了:

image-20210503165156585

这个时候,我已经把1号员工的信息,从缓存当中删除掉了。

如果这个时候,我再次查询1号员工的信息,缓存当中已经没有了。

就需要查询数据库了。

image-20210503165301176

image-20210503165312608

我们看到查询1号员工,确实是查询数据库了。

@CacheEvict的allEntries属性

image-20210503165445528

这是把缓存当中的数据,都删除了。

@CacheEvict的beforeInvocation属性

image-20210503165627753

缓存的清楚,是否在方法之前执行,默认是false的。

默认是在方法执行之后,执行的。

如果调整为在方法执行之前执行呢?

image-20210503165745624

在方法执行之后执行的意思是,如果方法在执行过程中报错了,那么缓存就不会清空了。

在方法执行之前执行的意思是,不管方法执行有没有报错,缓存都是会被清空的。

image-20210503170132200

@Caching注解

定义复杂的缓存规则

image-20210503170634700

从上面的图中,我们可以看到,这个注解,是@Cacheable、@CachePut、@CacheEvict三个组合注解。

修改mapper

image-20210503170902328

修改service

image-20210503171123664

修改controller

image-20210503173434676

测试一下

image-20210503173505078

image-20210503173536742

image-20210503173546184

image-20210503173558744

说明这些缓存注解起到了作用了。

@CacheConfig

把公共的一些配置,都放在类上面的。

抽取缓存的公共配置

image-20210503173814905

image-20210503173913054

桓宓(上阳赋)- 陈瑾如

1

2

3

4

5

6

7

标签:缓存,springboot,CachePut,更新,查询,修改,雷丰阳,方法
来源: https://www.cnblogs.com/gnuzsx/p/14728035.html