【redis 什么是缓存击穿?缓存击穿发生的情况?怎么预防缓存击穿,怎么解决缓存击穿?】

什么是缓存击穿

缓存击穿,也被称为缓存雪崩的一种特例,指的是在高并发访问的情况下,某个热点数据由于某种原因(如过期)从缓存中不存在了,由于对该数据的大量并发请求无法在缓存中处理,都会穿透到数据库层,导致数据库瞬时压力骤增,甚至可能引发数据库宕机。

缓存击穿发生的情况

  • 热点数据过期:某个热点数据在缓存中的存储时间到期,此时大量请求同时到达,都会发现缓存中没有数据,于是都去数据库请求数据。
  • 缓存数据被误删除:由于某种原因,如缓存清理策略或人工误操作,导致热点数据的缓存被删除,而此时有大量请求到来。
  • 缓存设计不合理:缓存中某些Key的设计不合理,导致缓存失效时产生大量相同的请求。

预防缓存击穿

  • 热点数据永不过期:为热点数据设置较长的过期时间或永不过期,但这可能会导致数据更新不及时。
  • 预加载:在系统启动时或低峰期,预先加载热点数据到缓存中。
  • 分布式锁:当多个请求同时发现缓存中数据不存在时,使用分布式锁确保只有一个请求去数据库查询,然后将结果存入缓存,其他请求等待数据加载到缓存后再访问。
  • 缓存空对象:当缓存失效时,不直接访问数据库,而是将空对象或默认值存入缓存,但设置较短的过期时间。
  • 设置缓存过期时间随机化:避免大量热点数据的缓存同时过期。
  • 后端限流和降级:通过限流组件(如Guava RateLimiter、Sentinel等)对访问数据库的请求进行限流,防止过多的请求压垮数据库;同时可以通过降级策略,暂时关闭部分功能或返回默认值。

解决缓存击穿

  • 快速恢复缓存:一旦发现缓存击穿,立即触发机制从数据库加载数据到缓存中,确保后续请求可以从缓存中获取数据。
  • 监控和告警:实时监控缓存的命中率、访问量等指标,设置合理的告警阈值,一旦发现异常及时通知相关人员处理。
  • 容灾备份:确保数据库有容灾备份能力,在数据库宕机或性能下降时能够迅速切换到备份数据库。
  • 应用层限流:在应用层对访问量进行限制,防止过多的请求冲击系统。
  • 缓存降级:在缓存击穿发生时,可以将部分非核心功能暂时降级,减少对数据库的访问压力。
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值