Redis常见问题(缓存穿透、缓存雪崩、缓存击穿)

缓存穿透

  • 问题:
    缓存穿透是指客户端请求的数据在数据库中根本不存在,从而导致请求穿过缓存,直接打到数库的问题
  • 常见的两种解决方案:
    (1) 缓存空对象
    优点:实现简单,方便维护
    缺点:额外占用内存
    在这里插入图片描述

(2)布隆过滤器
优点:内存占用少
缺点:实现复杂,存在误判可能
在这里插入图片描述
在这里插入图片描述

缓存雪崩

  • 问题
    缓存雪崩是指同一时段大量的按缓存 key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。
  1. 大量的缓存 key 失效
    在这里插入图片描述
  • 解决方法
    给不同的 key 的 TTL添加随机值
  1. Redis服务宕机
    在这里插入图片描述
  • 解决方法
    (1)利用 Redis 集群提高服务的可用性
    (2)给缓存业务添加降级限流策略
    (3)给业务添加多级缓存

缓存击穿

  • 问题
    缓存击穿问题也叫热点 key 问题,就是一个被高并发访问并且缓存重建业务较复杂的key 突然失效了,无数的请求会对数据库带来巨大冲击。
    在这里插入图片描述

  • 常见的两种解决办法
    (1)互斥锁
    在这里插入图片描述
    设置互斥锁,只有一个线程可以执行更新缓存的操作,当这个线程没有完成更新缓存的操作时,其他读取缓存的线程都要处于等待状态,这就导致可能线程死锁或者等待时间过长的问题。
    (2)逻辑过期
    在这里插入图片描述
    取消设置 key 的 TTL 过期时间,采用逻辑维护 key 的过期时间,这样就不会出现缓存未命中的情况, 当某个线程发现逻辑时间已经过期,他会开启一个新线程去做查询数据库更新缓存的操作,之后将缓存中的旧数据返回,其他线程来查询缓存的时候,如果发现逻辑过期,获取互斥锁失败,就直接返回旧数据,因为同步缓存的操作已经有线程在做了。

  • 两种方法优缺点
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值