1. 问题介绍
缓存雪崩是分布式系统中常见的缓存失效问题,指的是 大量缓存数据在同一时间段内集中失效或缓存服务整体不可用,导致原本由缓存承担的请求压力瞬间转移到后端数据库或服务,造成数据库负载过高甚至崩溃,最终引发系统级故障的现象。
重要
就是缓存失效,请求大量压到了 DB 上导致的服务崩溃。
雪崩跟击穿最大的区别:击穿是个别 Key 过期,雪崩是大量 Key 过期。导致雪崩的问题有很多,我们可以捋一捋:
2024/10/18大约 7 分钟
缓存雪崩是分布式系统中常见的缓存失效问题,指的是 大量缓存数据在同一时间段内集中失效或缓存服务整体不可用,导致原本由缓存承担的请求压力瞬间转移到后端数据库或服务,造成数据库负载过高甚至崩溃,最终引发系统级故障的现象。
重要
就是缓存失效,请求大量压到了 DB 上导致的服务崩溃。
雪崩跟击穿最大的区别:击穿是个别 Key 过期,雪崩是大量 Key 过期。导致雪崩的问题有很多,我们可以捋一捋:
在 Redis 中,Hotkey(热点键)是指在一段时间内,被大量客户端频繁访问的键。例如,在一个电商系统的秒杀活动中,代表秒杀商品库存的 Redis 键就可能是一个 Hotkey,因为众多用户会同时频繁地查询和更新这个键的值。
HotKey存在两个问题。第一个是缓存过期导致的穿透问题,突发的大流量可能会压垮数据库,进而拖累整个服务。另一个问题是,突发的大流量可能会给缓存带来风险,虽然Redis的性能很好,也是有上限的。当然,HotKey还有一些其他的问题,像是数据不一致啊,分片流量过高等。
HotKey问题的解决方案还是比较简单的,它的本质就是一个穿透问题。使用多级缓存,或者单飞都可以解决。HotKey的真正难点在于发现哪个Key是HotKey,只要发现的足够及时,就有多种办法解决问题。由HotKey引发的事故,多数情况下都是发现不及时,引发的。
缓存击穿是指某个数据暂时不在缓存里,需要回源到数据库读取,结果同一时间出现了大量的请求压在了 DB 上,进而导致数据库异常拖垮整个服务。
如果你还有印象,我们在讲”读更新、写删除“的时候,就明确说过,这个方法好用,但是存在击穿问题。
参考下图:
