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

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

缓存击穿(Cache Breakdown)

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

原因:

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

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

解决方法:

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

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

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

缓存雪崩(Cache Avalanche)

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

原因:

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

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

解决方法:

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

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

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

缓存穿透(Cache Penetration)

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

原因:

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

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

解决方法:

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

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

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

总结

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

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

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

相关文章:

  • 大模型微调解读及参数设置实践示例
  • Python 正则表达式的非捕获组介绍
  • 亲测Windows部署Ollama+WebUI可视化
  • 2024年国赛高教杯数学建模A题板凳龙闹元宵解题全过程文档及程序
  • 在nodejs中使用ElasticSearch(二)核心概念,应用
  • 从面试中的“漏掉步骤”谈自我表达与思维方式的转变
  • 【设计模式】【创建型模式】工厂方法模式(Factory Methods)
  • LeetCodehot 力扣热题100
  • Qt5 C++ TcpSocket 如何判断是服务主动断开tcp socket连接?
  • Django 5实用指南(五)模板系统
  • 如何在 Mac 上安装并配置 JDK 环境变量
  • [AHOI2018初中组] 分组---贪心算法
  • 『ob』obsidian文件导出:使用Pandoc插件实现多格式转换
  • Leetcode63:不同路径 II
  • Oracle EBS 12.1和APEX 集成时 Apache的配置代理
  • OpenAI ChatGPT在心理治疗领域展现超凡同理心,通过图灵测试挑战人类专家
  • win 应用程序无法正常启动(0xc0000142)。请单击确定关闭应用程序
  • 使用Flink Operator部署Flink on k8s方案
  • QT多线程编程基础
  • Nginx(详解以及如何使用)
  • 陕西省副省长窦敬丽已任宁夏回族自治区党委常委、统战部部长
  • 宋徽宗《芙蓉锦鸡图》亮相,故宫首展历代动物绘画
  • 现场聆听总书记讲话,“00后”博士和大模型CEO都“热血沸腾”
  • 杭州一季度GDP为5715亿元,同比增长5.2%
  • “富卫保险冠军赛马日”创双纪录,打造赛马旅游盛宴,印证香港联通国际优势
  • 俄联邦安全局:俄军高级官员汽车爆炸案嫌疑人已被捕