白话讲解Redis缓存雪崩/雪崩应对方案

1.Redis是啥?为啥用它?

近日一位某公司人事的盆友问我什么是Redis雪崩?于是我查了查相关资料。发现网上资料大多太过专业,不够白话。并想如何组织语言把事情讲解明白呢?于是就有这篇文章记录一下。
(文章可能不够严谨专业大佬勿喷)

无Redis系统交互流程

早几年Redis还没有流行,比如某校的选课系统就是我当年的噩梦,为了选上篮球课,我六点起床打开系统等待抢课,最后也逃不过被卡掉的命运(这里不点名了,留一步。)
在这里插入图片描述
该校的系统没有缓存机制,这是卡的主要的原因之一(-.-!
那么它的请求处理机制应该是什么样子的呢?
在这里插入图片描述
可以看出每个请求都是如此,那么全校几万人同时操作,还规定抢课时间段!这就会让该时间段内数据库,同时去处理成千上万请求。这就导致我点击选课后,点击提交,直接白屏。等过会儿重新进入系统后发现篮球课被抢没了,合适的时间段只剩健美操了。
(还我青春!)

同时期的淘宝

当年淘宝上亿请求爆发,也没有崩溃,如果淘宝网和学校的网站一样尿性,那今日马爸爸就是马弟弟了。淘宝如此顺畅的原因之一也是提早运用了Redis,并且运用的非常成熟。
在这里插入图片描述
那么有Redis请求流程变成什么样了呢?
在这里插入图片描述
可以看出只要已请求过的数据都会被存储在Redis缓存中,当请求第二次来,直接取走对应的数据即可。减少了数据库执行SQL语句的时间。也缓解了数据库的压力。

Redis为什么会导致雪崩呢?

用淘宝举例子。这不是520了嘛。很多男生会在淘宝搜口红。
那么在该时间搜索的口红都是如下图-迪奥的。(此故事虚构)
在这里插入图片描述
这让圣罗兰、纪梵希、香奈儿、兰蔻等厂家大佬如坐针毡。纷纷联系淘宝,说迪奥给你多少钱?我比他多一个亿,把搜索口红后的结果显示我的口红。
就这样马爸爸拿着钱,并把之前专场迪奥的redis数据清理掉,把数据库添加了圣罗兰、纪梵希、香奈儿、兰蔻后。开心的数着钱。
可是马爸爸不知道,就在清空redis中迪奥缓存数据的同时,正好赶上迪奥19.9元的秒杀包邮活动开始。此时全中国几亿的男性正在请求点击迪奥产品准备下单。可redis中没有了迪奥的数据,redis面对几亿的男性请求直接暴毙(该案例条件下可以被称为缓存击穿),把责任推给了数据库,数据库一看几亿男性的请求,喊了句MMP,也当场暴毙。就这样几亿有去无回的请求也耗尽了其他服务的资源。导致服务崩溃(称其:雪崩)。
如下为缓存雪崩图
在这里插入图片描述

雪崩译文:某宝贪财->清理redis数据->redis暴毙->数据库暴毙->某宝系统暴毙->男性口红没买到->媳妇很生气->几亿男性暴毙->世界暴毙。

如何避免雪崩

那么雪崩这么严重,我们如何避免呢?
1.首先我们可以集群使用,即使有redis挂了,依然有其他的redis可以过来提供服务,当然最好就是使用redis cluster集群,多个redis master,不仅有主备服务可以在故障时进行切换,即使真的主备都挂了,那也只是一部分数据不能提供服务了,还有其他的master可以给其他提供服务,尽量的减少redis宕机所带来的影响
(俗话:就是多弄几个Redis,如果一个Redis倒下了,还有千千万万个站出来)
2.清理某些Redis数据时,可以慢慢清理。比如Redis数据时间过期,可以在程序里加一个随机函数
如下添加个随机值,让失效时间随机、让数据失效变为随机失效。可以直接规避该这个问题。
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闯孙闯孙

觉得有用就赞一个呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值