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

Redis 缓存问题:缓存雪崩、缓存击穿、缓存穿透

文章目录

    • 缓存雪崩
    • 缓存击穿
    • 缓存穿透

在实际的业务场景中,Redis 通常作为缓存和其他数据库(例如 MySQL)搭配使用,用来减轻数据库的压力。但是在使用 Redis 作为缓存数据库的过程中,可能会遇到一些常见问题,例如缓存穿透、缓存击穿和缓存雪崩等。

缓存雪崩

缓存雪崩是指缓存中大批量的 key 同时过期,于是大量请求访问数据库,从而导致数据库压力激增,甚至引起数据库宕机,这种现象被称为 “缓存雪崩”。

避免缓存雪崩的措施有:

  1. 给缓存数据设置不同的过期时间,避免同时过期;
  2. 利用 Redis 集群提高服务可用性,避免因 Redis 宕机引起的缓存雪崩;
  3. 给缓存业务添加降级限流策略;
  4. 使用多级缓存架构,分散缓存失效的影响。

缓存击穿

如果 Redis 中一个被高并发访问并且缓存重建业务较复杂的 Key 突然失效,那么大量请求将直接访问数据库,从而瞬间给数据库造成巨大冲击。这种现象被称为 “缓存击穿”。

避免缓存击穿的措施有:

  1. 使用互斥锁:

    当缓存未命中时,通过互斥锁方式,确保只有一个线程访问后端存储获取数据,并重建缓存,其他线程保持排队等待。

    优点:没有额外内存消耗(不需要设置逻辑过期数据);保证数据库数据与缓存数据的一致性;

    缺点:线程需要等待,性能受影响;当多个线程需要竞争多把锁时,可能会有死锁风险。

  2. 逻辑过期:将缓存

相关文章:

  • Ansys Zemax | 如何使用物理光学传播(POP)工具描述空间电场传播(三)
  • 计网 2025/4/8
  • 文献管理利器:Zotero + EasyScholar + Ethereal Style
  • IP协议之IP,ICMP协议
  • 【CryoET】IsoNet使用流程
  • c编译和c++编译有什么区别?
  • PolarDB 读已提交事务隔离级别 select ... for update, where条件未用索引,查不到数据的时候不会锁表
  • 游戏引擎学习第209天
  • 第十届 蓝桥杯 嵌入式 省赛
  • 前端知识(vue3)
  • Python 字典和集合(常见的映射方法)
  • 【学Rust写CAD】39 over_in_in 函数(alpha256补充方法)
  • JS中的Promise对象
  • 源代码保密解决方案
  • linux上todesk无法使用问题
  • 避免误用strncmp与memcmp,strcpy与memcpy
  • CSS中的inline-flex与flex的区别
  • 在C++11及后续标准中,auto和decltype是用于类型推导的关键特性,它们的作用和用法。
  • 力扣热题100刷题day62|283.移动零、39.组合总和、94.二叉树的中序遍历
  • 百度开放平台调用动物识别接口
  • 大型的网站后台用什么做/淘宝关键词排名是怎么做的
  • 重庆医院门户网站建设/谷歌搜索网页版入口
  • 设计网站下载/搜索排名优化
  • 网站建设 嘉定/全球最大的中文搜索引擎
  • 企业网站建设策划/搜狗搜索网页版
  • 网站建设要点/网络营销模式下品牌推广研究