Redis面试高频三大问-缓存穿透、缓存击穿、缓存雪崩

我通俗易懂的讲给你听,保证你一次记住

缓存穿透

穿透,如下图

客户端访问缓存, 缓存没数据,要去数据库查询, 数据库也没有, 频繁大量的这种查询请求,就穿透了,导致库崩了。

 解决方案

1.访问一次,如果缓存层和数据库都没有,就在缓存层存一个对象, 下次访问就不用访问库了。

        缺点:可能会存储很多的对象,浪费空间。

2.加布隆过滤器,就是一种数据结构, 一个长度m的 bit位数组 + n 个hash函数组成的数据结构。

说白了就是把数据库的数据在 这个数组做个标记, 先去缓存查数组,数组没这个标记说明没这条数据,就不去访问数据库了。

        缺点:可能会出现标记显示的有,但是实际上没有的情况,但是这是偶然概率。如果标记显示没有就一定没有。

缓存击穿

击穿,并没有穿透, 如下图

没有透过数据库,说明数据库有数据。

缓存在内存,可能会过期,如果在某一时间查询的时候,缓存中的数据过期了,是不是就需要到数据库查,这个时候大量的请求会把数据库访问崩。

 解决方案

1.设置永不过期的key,或者设置过期时间,同时启动定时任务去定时去更新这个缓存。

2.加锁,同一时间只有一个线程可以获取到锁,获得锁的线程去数据库把数据加载到内存。

缓存雪崩

雪崩就是全完蛋了,直接上图

 如果redis崩了,或者在同一时间大量的Key过期了,是不是就不走缓存了,直接访问数据库了,直接访问数据请求太多的话,数据就有可能崩。

解决方案

 1.高可用呗,做集群,一个崩了,有其他的顶上。

2.限流组件开启,高并发给一部分请求降降级,限限流。

3.避免同一时间大量的Key过期,那就 随机设置过期时间,过期时间长点,或者设置永不过期。

4.redis可内存可持久化没忘了吧, 把持久化开启,发生雪崩就从RDB和AOF文件中恢复。

ps:来自大山放牛的孩子,追求更高更牛的技术。

       如果文章对你有帮助,点个关注吧!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

chad__chang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值