缓存穿透 / 缓存击穿 / 缓存雪崩 / 缓存一致性

本文介绍了缓存穿透、缓存击穿、缓存雪崩及缓存一致性等问题,并提出了相应的解决办法,包括设置热点数据永不过期、加锁机制、过期时间随机化等。

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

先介绍这些概念:

  • 缓存穿透: 请求不存在的数据, 缓存中没有查到, 会去数据库中查找
  • 缓存击穿: 数据较为热点, 当 key 过期时, 同一时刻, 大量请求进来, 此时缓存还未存入, 请求都落到数据库查找
  • 缓存雪崩: 同一时刻, 大量设置过期时间的 key 失效
  • 缓存一致性: 缓存和数据库数据不一致

解决办法:

  • 缓存穿透: 把这些不存在的数据也缓存起来, 值为 null, 设置较短的过期时间 (例如 30s), 避免攻击者恶意请求不存在的数据, 给数据库造成压力
  • 缓存击穿: 有 2 种方式
    • 设置热点数据永不过期
    • 加锁, 锁的内容是查询 redis / 查询数据库 / 存入 redis
  • 缓存雪崩: 过期时间设置随机系数, 避免大量 key 同时过期
  • 缓存一致性: 大多数情况下, 操作完数据库后, 删除或者更新缓存即可. 一致性要求高的, 考虑使用 binlog 订阅 mysql 的 canal 实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值