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

本文探讨了缓存系统中常见的问题——缓存穿透、击穿和雪崩,介绍了各自的成因及应对方法,包括空值缓存、白名单、布隆过滤器、热点数据预加载、锁机制、多级缓存架构等解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

缓存穿透(大量请求并不存在的空值)

key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会压到数据源,从而可能压垮数据源。

解决方案:

  • 对空值缓存
  • 设置可访问白名单(用bitmap数据结构)
  • 采用布隆过滤器
  • 实时监控
缓存击穿(缓存过期,大量并发请求涌入数据库)

key对应的数据存在,但在redis中过期,此时若有大量并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。

解决方案:

  • 预先设置热门数据:在redis高峰访问之前,把一些热门数据提前存入到redis里面,加大这些热门数据key的时长
  • 实时调整:现场监控哪些数据热门,实时调整key的过期时长
  • 使用锁
缓存雪崩(缓存集中过期,正好遇到大量并发请求,涌入数据库)

缓存雪崩与缓存击穿的区别在于这里针对很多key缓存,前者则是某一个key

解决方案:

  • 构建多级缓存架构:nginx缓存 + redis缓存 +其他缓存(ehcache等)
  • 使用锁或队列
  • 设置过期标志更新缓存
  • 将缓存失效时间分散开
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值