当前位置: 首页 > article >正文

redis的缓存击穿,雪崩,穿透

缓存击穿(Cache Breakdown)

某个热点数据在缓存中过期或失效的瞬间,大量请求直接打到数据库上,导致数据库压力骤增。

原因:

  • 热点数据在缓存中过期。

  • 大量并发请求同时访问该数据。

解决方法:

  • 永不过期:对热点数据设置永不过期,但需要定期更新。

  • 互斥锁:在缓存失效时,使用互斥锁(如Redis的SETNX命令)确保只有一个请求去数据库加载数据,其他请求等待并重试。

  • 异步更新:在缓存即将过期时,异步更新缓存,避免大量请求同时打到数据库。

缓存雪崩(Cache Avalanche)

指缓存中大量数据在同一时间过期或失效,导致大量请求直接打到数据库上,引起数据库压力骤增甚至崩溃。

原因:

  • 大量缓存数据在同一时间过期。

  • 缓存服务器宕机或重启。

解决方法:

  • 分散过期时间:为缓存数据设置随机的过期时间,避免大量数据同时过期。

  • 高可用架构:使用Redis集群或其他高可用架构,避免单点故障。

  • 降级和限流:在缓存失效时,使用降级策略(如返回默认值)和限流策略(如限制请求速率)来保护数据库。

缓存穿透(Cache Penetration)

指查询一个不存在的数据,由于缓存中没有该数据,请求直接打到数据库上,导致数据库压力增加。

原因:

  • 查询的数据在数据库和缓存中都不存在。

  • 恶意攻击或大量无效请求

解决方法:

  • 布隆过滤器:使用布隆过滤器(Bloom Filter)在缓存层过滤掉不存在的数据,避免请求打到数据库。

  • 缓存空值:对于查询结果为空的请求,缓存一个空值(如NULL),并设置较短的过期时间,避免重复查询数据库。

  • 参数校验:在业务层对请求参数进行校验,过滤掉明显无效的请求。

总结

  • 缓存击穿:热点数据失效导致大量请求打到数据库。

  • 缓存雪崩:大量缓存数据同时失效导致数据库压力骤增。

  • 缓存穿透:查询不存在的数据导致请求直接打到数据库。


http://www.kler.cn/a/555529.html

相关文章:

  • git空文件夹不能提交问题
  • acm培训 part 7
  • VBA脚本将DeepSeek嵌入Word中教程
  • 【C++】实现一个JSON解析器
  • 【小游戏】C++控制台版本俄罗斯轮盘赌
  • JavaEE-SpringBoot快速入门
  • QT QLabel加载图片等比全屏自适应屏幕大小显示
  • 2025最新版Pycharm如何设置conda虚拟环境运行程序
  • 【Vue】前端记录点
  • LLM基础概念(RAG、微调流程、Prompt)
  • 利用ollama本地部署deepseek
  • AI大模型零基础学习(7):边缘智能与物联网——让AI走出云端
  • Go Web 开发基础:从入门到实战
  • 无人机避障——感知篇(采用Mid360复现Fast-lio)
  • 第四篇:开源生态与蒸馏模型的价值
  • leetcode day19 844+977
  • 【Java八股文】08-计算机网络面试篇
  • Unity3D协程的优化方案
  • 通过C语言实现“数据结构”课程中的链表,数据,数,图
  • C语言.h头文件的写法