Redis缓存击穿、穿透、雪崩、倾斜的问题及解决方案

这是一个老掉牙的面试题,如果被问到且不会,那也够你喝一壶的了,话不多说,直接上干货。

一、缓存穿透

        1.场景

        大量客户端请求查询数据,这个数据Redis没有,DB也没有,大量请求Redis可以承受,DB承受不了宕机了。

        2.解决方案

        1)可能有人要干我(恶意攻击),针对发起大量请求的ip进行封禁。

        2)针对不存在的key给它缓存一个null,每次查都返回null。

        3)布隆过滤器,在查数据库之前,可以先经过布隆过滤器查看是否存在,存在再查DB

        (布隆过滤器最大的特点是:说有的不一定有,说没有的一定没有

二、缓存击穿

        1.场景

        存放在Redis中的热点数据生存时间到期,导致大量请求查询DB,DB宕机。

        2.解决方案

        1)热点数据生存时间不应该到期,查一次,增加一次生存时间

        2)查询DB之前加锁(分布式锁、传统锁都可以)

三、缓存雪崩

        1.场景

        Redis缓存中的大量数据生存时间同时到期,导致大量请求访问DB,导致DB宕机。

        2.解决方案

        1)查询数据库之前加锁(分布式、传统锁)

        2)缓存预热时,将key的生存时间设置为一个范围,不让它们同时到期

四、缓存倾斜(热key问题)

        1.场景

        有一个超级热点数据存储在Redis集群的某一个结点上,导致大量的请求都访问Redis集群的某一个节点,导致这个节点宕机

        2.解决方案

        1)给存放热点数据的节点搭建主从架构分担查询压力

        2)多级缓存(本地缓存、cdn、redis等)

        3)将key根据一定的后缀名进行拆分,分散到多个阶段中,客户端请求的时候再根据一定规则计算得到一个固定的key

五、记忆技巧

        首先,雪崩的概念比较容易记,就是很多个key同时到期才会雪崩,”缓存雪崩的时候没有一个Key是无辜的“。

        至于穿透和击穿,区别在于穿透是”透“,什么叫透呢,那就是不仅被缓存击穿了,数据库也被击穿了,这种才叫透。所以,这种缓存和数据库中都没有的情况叫做”缓存穿透“。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

橡 皮 人

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值