Spring Cache

Spring Cache

1.Spring Cache 介绍

在这里插入图片描述

说明:Spring Cache是一个框架,实现了基于注解的缓存功能,只需要简单的加一个注解就能实现缓存功能.Spring Cache提供了一层抽象,底层可以切换不同的cache实现,具体就是通过CacheManager接口来统一不同的缓存技术.
CacheManager是Spring提供的各种缓存技术的抽象接口

2、Spring Cache 常用注解

在这里插入图片描述

1.1SpringCache_使用方式——CachePut注解

创建一个简单的Spring boot的项目,在UsrController层中自动装配一个CacheManager
注:CacheManager其实是一个接口,具体的缓存管理器有这么几种,这里使用框架给我们提供的,默认的ConcurrentMapCacheManager

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

说明:这个CachePut注解一般都是写在Controller的一个方法上,前面的这个value = “usrCache”–>其实就是缓存的名称,每个缓存名称下面可以有多个key,在save方法上,我们想要key来动态的获取 #result(这个就表示返回值,usr),#usr.id就可以动态的获取到id.–>选用id是因为 id 一般就是唯一标识
这里用加断点的方式来在usr.Service.save(usr)上加一个断点:
在postman中发送两个post请求,两个表单数据,name 和 age我们可以看到,发送过来的请求,其实是将这个数据放入ConcurrentMapCheManager类管理的 一个 ConcurrentHashMap 这个对象里面.
在这里插入图片描述

提示:这个map其实是基于内存的,当服务停止,再重启服务,这个缓存的数据就没有了.
解决方法:后期使用 redis这种缓存方式

2.1SpringCache_使用方式_CacheEvict注解1

@CacheEvict注解可以用来清理缓存的数据
value来指定是哪个缓存(就是缓存名称),下面的哪一个key。
在这里插入图片描述

在这里我们通常想要获取参数的值,由他的说明注解来看:我们有这么几种方式在这里插入图片描述

例如我们可以写 #p0—>代表的就是第一个参数
也可以写 #root.args[0] -->代表还是第一个参数
最简单的还是写 # id (参数名)
这三种方法其实都是为了获取参数.

2.2 SpringCache_使用方式_CacheEvict注解2

同样的,我们在更新数据时也需要先将缓存的数据先删除,否则在进行相关业务处理的时候会出现,数据库中的数据更改(操作mysql数据库),但是页面上的数据未做更改(使用redis缓存了数据,但是没有删除).在这里插入图片描述

在postMan测试,更改一条数据的时候,会根据id先将这条缓存数据删除.然后在经过usrService.updateById去更改数据库中的数据

3.1 SpringCache_使用方式_Cacheable注解

@Cacheable:在方法执行前spring会先查看缓存中是否有数据,如果有数据,则直接返回缓存数据,若没有数据,调用方法返回值放到缓存中去在这里插入图片描述
postman进行测试在这里插入图片描述
说明:1.在UserService.getById(id)处下一个断点,当第一次去查询一个id的时候,会执行到该断点,当重复postman去发一个请求时,则不会到该断点,而是直接返回数据.
2.在发送一个数据库中没有的id时,同样会将这个没有的id进行缓存,例如:想要查找id =123,但是数据库中并没有对应的id,则会缓存 value = "usrCache"这个缓存名称 , 123 --> null这么一个数据
解决方法:其实在Cacheable这个注解下,有这么两个属性
1.condition 即 条件,当满足某条件时,才去缓存数据
String condition() default “”
2.unless 即满足什么条件的时候,不缓存数据
String unless() default “”
故改造一下:
这里设置了 condition = “#result != null”
当返回的结果不为null时,才去缓存数据

在这里插入图片描述
SpringCache_使用方式_Cacheable注解2
在这里插入图片描述
说明:这里的key 使用 id 和 usr_name来一同动态的获取key .
注:现在的缓存,底层是基于map来实现的,缺点明显,当服务重启后,缓存的数据就不见了 。
----->改善 : 使用 redis

3.在SpringBoot项目中使用Spring Cache的操作步骤(使用redis缓存技术)

在这里插入图片描述
1.导入maven坐标
在这里插入图片描述
在导入这个maven坐标后,
可以看到CacheManager这个接口的实现类,变多,但是并没有redis的cachemanager,还需要导入另一个maven坐标
在这里插入图片描述

在导入redis的这个maven坐标后
在这里插入图片描述
可以看到CacheManager这个接口的实现类中出现了一个叫RedisCacheManager的类在这里插入图片描述
2.配置apilication.yml
在配置文件中的spring下配置:
注意这里time-to-live代表的是缓存的时间,单位是毫秒

在这里插入图片描述
3.使用注解使用缓存功能在这里插入图片描述
注:使用redis缓存技术时,condition这里不能再使用#result了,可以comand + b 进入 @Cacheable注解中去查看,所以 这里改用 unless -->注意条件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有梦想的小何

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值