springboot通过注解使用redis缓存以及分布式锁
1. springboot通过注解使用redis缓存
-
加入缓存的配置类
-
在相应的方法上加入缓存注解(简单测试,忽略细节)
controller层
-
启动缓存注解
用Postman软件测试
此时数据库数据有
缓存为空!!
测试查询
第一次查询
缓存中也存放了一份
然后清空控制台
测试新增
查询一下
查看缓存
发现查询的时候将数据放到了缓存中
测试修改
测试删除
2. 分布式锁
常见的加锁方式有两种
synchronized: 可以加在方法上,方法体内,类上。 自动获取锁,自动释放锁。 不会造成死锁。
lock: 加在方法体内。 手动获取锁 手动释放锁。如果出现异常而没有手动释放锁,则造成死锁。
分布式锁
使用redis中的setNx判断是否获取锁资源 使用del释放锁资源
例子
3. redis缓存穿透处理方法
缓存穿透:缓存中没有该数据并且数据库中也没有该数据, 这时如果有大量的恶意请求来访问这种数据时,这些请求会穿过缓存, 到达数据库。
处理方法:
1. 如果数据库中不存在该数据时,往缓存中存放一个空对象。该对象什么也不做。(最简单的方法,但是缓存中会存在大量的冗余数据。可以设置很短的过期时间)。
2. 使用布隆过滤器。理解为一个容器 把数据库中的所有数据id放入到布隆过滤器中,如下图