Redis缓存击穿,穿透和雪崩
2021-03-26 14:26:57 17 举报
Redis缓存击穿,穿透和雪崩
作者其他创作
大纲/内容
方案2. 强依赖击穿方案
前置条件:用户请求缓存和数据库中都没有的数据
3. 获得锁的线程访问DB
2. 增加互斥锁setNx(key)
DB
缓存雪崩
2. Redis没有直接请求数据库
1. 数据库有的根据算法映射到Bloom
Client
布隆算法
Redis
问题:1. 第一个线程挂了,后面线程全部在等待 设置锁过期时间2. 没挂,锁超时 多线程,当前线程获取DB,另外一个线程监控续期
2. 当请求数据库中没有的数据因为Bloomg过滤器没有对应商品映射值直接返回
缓存穿透
前置条件:高并发请求过来
间接造成大量请求到达数据库
缓存击穿
1. 用户请求id = -1的数据
1
随机过期时间
0
key 过期,同一个过期的key有大量请求直接到DB上
Redis是单进程单实例增加互斥锁 setNx(key)
Redis跟DB都没有,造成无效请求
Bloom
4. 锁等待-sleep
1. 第一个线程请求为null
增加布隆过滤器客户端布隆/Redis布隆
方案1. 业务控制
时点性数据
解决:1. 可以考虑在客户端增加bloom过滤器(增加客户端内存压力)亦或者使用Redis插件Bloom过滤器2. 如果使用Redis的Bloom过滤器,则首先需要将数据库有的数据映射到Bloom,用户请求时根据布隆算法直接过滤无效请求(但是布隆只能增加不能删除),那就可以使用布谷鸟过滤器
前置条件:大量的key同时失效
业务层判断时点延时 - sleep
非时点性数据
0 条评论
回复 删除
下一页