Redis 之缓存穿透、雪崩、击穿

本文详细介绍了缓存中的三大问题:缓存穿透、缓存雪崩和缓存击穿。对于缓存穿透,提出了参数校验、缓存无效key及使用布隆过滤器的解决方案;缓存雪崩则可以通过设置随机过期时间和热点数据分散存储来预防;缓存击穿可通过设置热点数据永不过期或使用互斥锁来避免。这些策略旨在保障系统的稳定性和高可用性。
摘要由CSDN通过智能技术生成

缓存穿透

缓存穿透:指用户不断请求缓存和数据库中都不存在的数据,导致请求不经过缓存,直接落到数据库上。
在这里插入图片描述
解决办法有:

  1. 增加参数校验,或者拉黑访问过于频繁的 ip。
  2. 缓存无效的 key,并设置过期时间,适用于 key 变化不频繁的情况。
  3. 使用布隆过滤器,将所有存在的数据哈希到 Redis 的 bitmap 中。加入时,通过多个 hash 确定多个数组下标,将值置为 1。 然后判断时,以同样的方式 hash 确定下标,若值都为 1,则说明存在,否则说明不存在。但数组大小有限,不同数据可能哈希出来的位置相同,所以有误差,可能会误拦截存在的数据。

缓存雪崩

缓存雪崩:指缓存大面积失效,导致大量请求直接落到数据库,把数据库打崩。
在这里插入图片描述
解决办法有:

  1. 为每个 key 的失效时间加上随机值,避免同时失效。
  2. 如果 Redis 是集群部署,将热点数据均匀分布在不同的 Redis 库中也能避免同时失效。
  3. 设置热点数据永远不过期,并且选择合适的数据淘汰策略,避免缓存被耗尽。

缓存击穿

缓存击穿:指热点数据过期瞬间,有大量请求击穿 Redis,直接落到数据库。

解决方法有:

  1. 设置热点数据永远不过期,并且选择合适的数据淘汰策略,避免缓存被耗尽。
  2. 加互斥锁,比如 synchronized、ReentrantLock,或者在 Redis 中使用 SETNX(set if not exists)
    命令实现分布式锁。

《吊打面试官》系列-缓存雪崩、击穿、穿透

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值