提到Redis,相信大多数开发者在面试或者实际开发过程中对缓存雪崩,穿透,击穿并不陌生吧;下面就来看看这三者到底有什么区别?又如何防止这种情况发生呢? 先来看看什么是缓存雪崩 开发中,针对系统中的热点数据都会去做缓存 ,一般缓存都是定时任务去刷新,或者是查不到之后去更新的,定时任务刷新就有一个问题: 举个简单的例子:如果所有热点数据的Key失效时间都是12小时,中午12点刷新的,零点的时候(距离中午刷新点刚好过了12个小时)因某种原因(活动,促销等)有大量用户涌入,假设当时每秒 6000 个请求,本来缓存在可以扛住每秒 5000 个请求,但是缓存当时所有的Key都失效了。此时 1 秒 6000 个请求全部落数据库,数据库必然扛不住。此时,如果没用什么特别的方案来处理这个故障时,就会非常难堪了,因为就算你重启了数据库,但是数据库立马又被新的流量给搞挂了。 同一时间大面积失效,那一瞬间Redis跟没有一样,那这个数量级别的请求直接打到数据库几乎是灾难性的,你想想如果打挂的是一个用户服务的库,那其他依赖他的库所有的接口几乎都会报错,如果没做熔断等策略基本上就是瞬间挂一片的节奏,你怎么重启用户都会把你打挂.此时用户内心👇 如何防止这种情况呢? 处理这个问题的关键:就是要确保数据不会在同一时间大面积失效 思路有了,处理起来就不难了,下面是几种方案: 在批量往Redis存数据的时候