Redis常见缓存失效场景

Redis常见缓存失效场景,第1张

Redis常见缓存失效场景 Redis常见缓存失效场景 1. 穿透

关键字: 缓存和数据库都没有

我的理解:缓存在此时形同虚设,请求直接透传到数据库中,所以叫穿透

频繁请求缓存和数据库中都没有的数据,因为从数据库中查询到任何数据,所以不会写入缓存,导致缓存失去作用,请求可以直接穿透透传到数据库,造成数据库巨大的压力,请求过大时DB可能就挂了。

解决方案:

接口层增加校验:用户登录鉴权、请求参数过滤(如ID<=0的请求直接过滤掉)等;

短时间缓存空数据:可以将数据库中不存在的数据短暂缓存起来,比如: key:null,缓存过期时间设置为30秒,这样可以一定程度上缓解恶意用户使用同一个key暴力攻击数据库

布隆过滤器

2. 击穿

关键字:缓存无(过期),数据库有

我的理解:

此种场景有两个关键字:一个过期的key、高并发,重点在击这个字,被谁击,被高并发的请求击,就是一个已过期的key在同一时间点被高并发的请求所攻击,导致数据库的压力瞬间陡增,有挂掉风险。

在某一时刻,有大量并发请求打过来,它们同时去读缓存,缓存已过期没有获取到数据,然后又同时去数据库取数据,导致数据库压力陡增。

解决方案:解决掉两个关键字就可以解决问题

热点数据的缓存有效期设置为永不过期 —— 解决过期的问题

接口层增加限流、熔断、降级处理 —— 解决高并发的问题

使用互斥锁:在查询数据库的时候加上互斥锁,保证同一时间只有一个线程可以 *** 作数据库 —— 解决高并发的问题

3. 雪崩

关键字:缓存无(过期),数据库有

雪崩=击穿的plus版(plus的地方是大量过期的key)

我的理解:

此种场景也是有两个关键字:大量过期的key、高并发,大量过期的key面对高并发的请求时,缓存失效,所有请求都打到数据库,导致数据压力瞬间陡增,有挂掉风险。

解决方案:也是解决掉两个关键字

热点数据的缓存有效期设置为永不过期 —— 解决过期的问题

过期时间随机化,尽量让过期时间均匀分布,避免同一时间存在大量过期的key —— 解决过期的问题

使用互斥锁:在查询数据库的时候加上互斥锁,保证同一时间只有一个线程或少量线程可以 *** 作数据库 —— 解决高并发的问题

先写这么多,后续有想到其他更多的方面,再做补充!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5703556.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存