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

Redis缓存雪崩、击穿、穿透

Redis缓存雪崩

指的是在某一时刻,大量缓存数据同时失效或Redis服务宕机,导致所有请求直接打到数据库,造成数据库压力骤增,甚至崩溃的现象。

原因:

1. 缓存集中失效:

        大量缓存设置了相同的过期时间,导致它们在同一时刻失效,请求直接访问数据库。

2. Redis 服务宕机:

        Redis实例崩溃或网络故障,导致缓存不可用,所有请求直接访问数据库。

3. 热点数据失效:

        热点数据的缓存失效,导致大量请求同时访问数据库。

解决方案:

1. 设置不同的过期时间:为缓存数据设置随机的过期时间,避免大量缓存同时失效。

2. 使用多级缓存:引入本地缓存(如Guava Cache)作为Redis的补充,即使Redis失效,本地缓存仍能缓解数据库压力。

3. 限流与降级:使用限流工具(如Hystrix、Sentinel)限制请求量,或降级处理部分请求,减轻数据库负担。

4. 高可用框架:部署Redis集群或主从复制,确保即使某个节点宕机,其他节点仍能提供服务。

5. 缓存与预热:在系统启动或缓存失效前,提前加载热点数据到缓存中,避免大量请求直接访问数据库。

6. 持久化与备份:启用RDB或AOF持久化,定期备份数据,确保Redis故障后能快速恢复。

7.监控与警告:实时监控Redis和数据库的状态,设置告警机制,及时发现并处理异常。

Redis缓存击穿

指的是某个热点数据在缓存中过期或被删除时,大量请求同时涌入数据库,导致数据库压力骤增的现象。与雪崩不同,缓存击穿通常针对单个热点数据。

原因:

1. 热点数据失效:

        某个热点数据的缓存过期或被删除,导致大量请求直接访问数据库。

2. 高并发请求:

        在高并发场景下,大量请求同时访问同一个失效的热点数据。

解决方案:

1. 设置永不过期的热点数据:对热点数据设置永不过期,或通过后台任务定期更新缓存,避免缓存失效。

2. 互斥锁(Mutex Lock):当缓存失效时,使用互斥锁确保只有一个线程去数据库加载数据,其他线程等待缓存更新后再读取。

3. 缓存与预热:在系统启动或缓存失效前,提前加载热点数据到缓存中,避免大量请求直接访问数据库。

4. 限流与降级:使用限流工具(如Hystrix、Sentinel)限制请求量,或降级处理部分请求,减轻数据库负担。

5. 双缓存策略:使用两个缓存层,主缓存设置较短过期时间,备份缓存设置较长过期时间,主缓存失效时从备份缓存读取数据。

6. 监控与警告:实时监控缓存和数据库的状态,设置告警机制,及时发现并处理异常。

Redis缓存穿透

指的是查询一个不存在的数据,由于缓存和数据库中都没有该数据,导致每次请求都直接访问数据库,造成数据库压力过大的现象。与缓存击穿不同,缓存穿透针对的是不存在的数据。

原因:

1. 恶意请求:

        攻击者故意请求大量不存在的数据,导致缓存无法命中,请求直接打到数据库。

2. 业务逻辑问题:

        业务逻辑中存在漏洞,导致大量无效请求直接访问数据库。

3. 缓存未命中:

        缓存中没有所需数据,请求直接打到数据库。

解决方案:

1. 使用布隆过滤器:使用布隆过滤器判断数据是否存在,如果布隆过滤器判断数据不存在,则直接返回,避免访问数据库。

2. 缓存空值:对于查询结果为空的请求,将空结果缓存到Redis中,并设置较短的过期时间,避免重复查询数据库。

3. 参数校验:在业务逻辑中对请求参数进行校验,过滤掉明显无效的请求。

4. 限流与降级:使用限流工具(如Hystrix、Sentinel)限制请求量,或降级处理部分请求,减轻数据库负担。

5. 监控与警告:实时监控缓存和数据库的状态,设置告警机制,及时发现并处理异常。

6. 热点数据预热:在系统启动或缓存失效前,提前加载热点数据到缓存中,避免大量请求直接访问数据库。

相关文章:

  • 第一章 Java面向对象进阶
  • 利用AFE+MCU构建电池管理系统(BMS)
  • 设计模式相关知识点
  • 驱动开发、移植
  • 2025最新智能优化算法:改进型雪雁算法(Improved Snow Geese Algorithm, ISGA)求解23个经典函数测试集,MATLAB
  • MYSQL总结(1)
  • 鸿道Intewell操作系统:赋能高端装备制造,引领国产数控系统迈向新高度
  • C++中为什么有了tuple还需要pair?
  • 【C++】 Flow of Control
  • 同花顺C++面试题及参考答案
  • 【Elasticsearch】查询规则_query_rules
  • 【核心算法篇十四】《深度解密DeepSeek量子机器学习:VQE算法加速的黑科技与工程实践》
  • 【数据挖掘】
  • Leetcode - 周赛436
  • 通过监督微调提升多语言大语言模型性能
  • 使用rknn进行yolo11-pose部署
  • 曙光服务器安装centos8
  • 【Elasticsearch】Search Templates(搜索模板)
  • nginx ngx_http_module(8) 指令详解
  • 10. 软件设计架构-经典架构问题
  • 中方就乌克兰危机提出新倡议?外交部:中方立场没有变化
  • 中国天主教组织发贺电对新教皇当选表示祝贺
  • 外卖员投资失败负疚离家流浪,经民警劝回后泣不成声给父母下跪
  • 上海优化营商环境再攻坚,企业和机构有哪些切实感受?
  • 胖东来发布和田玉、翡翠退货说明:不扣手续费等任何费用
  • 化学家、台湾地区“中研院”原学术副院长陈长谦逝世