Redis分布式锁进阶第三十八篇

Redis分布式锁进阶第三十八篇:缓存穿透、击穿、雪崩 生产级完整解决方案

前言

前面篇章全部围绕Redis分布式锁进行深度讲解,本篇开始转入Redis缓存生产核心难题。缓存穿透、缓存击穿、缓存雪崩是面试必问、生产必踩的三大故障。本文保持连载简洁干货风格,直白讲清成因、风险、落地解决方案,全部为线上可直接使用的生产方案。

一、缓存穿透(查询不存在的数据)

1. 概念成因

用户请求的数据缓存没有、数据库也没有,请求直接穿透缓存,全部打到数据库。 常见场景:恶意伪造id、非法参数、空数据查询。

2. 危害

大量空请求压垮数据库,数据库频繁查询空数据,CPU飙升,正常业务SQL被阻塞。

3. 生产解决方案(由简到优)

  • 空值缓存:查询为空,依然缓存空数据,过期时间短(30s~5min),避免重复穿透。

  • 布隆过滤器:前置拦截,判断数据是否存在,不存在直接拦截,不访问Redis、数据库。

  • 参数校验:非法id、负数、空字符串直接在网关层拦截。

  • 限流防刷:单ip、单账号限制请求频率。

4. 优缺点说明

空值缓存实现最简单;布隆过滤器适合海量数据、高并发拦截;一般业务空缓存+参数校验足够使用。

二、缓存击穿(热点key过期)

1. 概念成因

某一个热点key突然过期,海量并发请求瞬间打到数据库,单节点压力爆炸。 典型场景:秒杀商品、爆款活动、首页热门数据。

2. 和穿透区别

穿透:查不存在数据;击穿:查存在数据,刚好key过期

3. 生产解决方案

  • 互斥锁(常用):Redis分布式锁,同一时间只允许一个线程查库,其他线程等待。

  • 热点key永不过期:取消expire,后台异步更新,避免主动过期。

  • 逻辑过期:数据内置过期时间,Redis不删除,后台异步刷新,业务永远有数据。

4. 业务选型

普通热点数据:永不过期;强一致性活动数据:分布式锁;高并发不准停机:逻辑过期。

三、缓存雪崩(大批量key同时失效)

1. 概念成因

大批量缓存key同一时刻集体过期,或者Redis宕机,大量请求瞬间压入数据库,造成数据库雪崩宕机。

2. 产生场景

  • 批量导入数据,过期时间设置一致;

  • Redis主从切换、宕机、断电;

  • 缓存热点集中,过期时间统一。

3. 生产解决方案

  • 过期时间加随机值:基础方案,打散过期时间,避免集中失效。

  • 多级缓存:本地Caffeine缓存 + Redis缓存,双层兜底。

  • Redis高可用:哨兵、集群部署,避免单机宕机。

  • 服务熔断降级:Redis异常时,直接返回默认数据、友好提示,不查库。

  • 定时预热缓存:高峰期前提前刷新热门key。

四、三者极简区别(面试必背)

类型 核心原因 攻击对象 最优方案
穿透 查询不存在数据 数据库 空缓存+布隆过滤器
击穿 单个热点key过期 数据库 分布式锁、永不过期
雪崩 大批量key同时失效 整套服务 随机过期+多级缓存+降级

五、生产通用缓存规范

  1. 所有缓存统一加随机过期时间,预防雪崩;

  2. 空数据务必缓存,时间不宜过长;

  3. 热门商品禁止固定过期时间,优先永不过期;

  4. 对外接口必须加限流、熔断、降级;

  5. 核心业务必须部署Redis集群,禁止单机上线;

  6. 禁止大量冷数据同时写入,防止批量过期。

相关推荐
水木流年追梦9 小时前
大模型入门-大模型优化方法12-YaRN 长文本外推技术
人工智能·分布式·算法·正则表达式·prompt
我不介意孤独9 小时前
04-记忆系统为什么向量数据库不够用
数据库·人工智能·资源隔离·agent infra
AOwhisky9 小时前
MySQL 学习笔记(第六期):MySQL 备份与恢复
运维·数据库·笔记·学习·mysql·云计算
qq210846295310 小时前
【数据库】TDengine 清理旧数据
数据库·oracle·tdengine
j_xxx404_10 小时前
MySQL表操作硬核解析:从 CREATE TABLE 到磁盘文件、ALTER TABLE 与 DDL 风险
运维·服务器·数据库·c++·mysql·adb·ai
数据库小学妹10 小时前
PostgreSQL迁移到国产数据库怎么做?评估、改造、上线全流程实操指南
数据库·经验分享·postgresql·dba
x***r15110 小时前
Redis Desktop Manager 0.8.8 安装教程(Windows redis-desktop-manager-0.8.8.384详细步骤)
数据库·windows·redis
initialize130611 小时前
Postgresql(Oracle兼容) 到Oracle19.9字符语义
数据库·oracle
稷下元歌11 小时前
七天学会plc 加机器视觉完整笔记:S7-1200 数据类型、存储区与寻址方式(I/Q/M/DB 详解)。
网络·数据库·笔记
无涯大者11 小时前
Redis 实现页面缓存、购物车、登录 token示例、点赞 / 阅读计数,排行榜 示例
redis·缓存