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. 禁止大量冷数据同时写入,防止批量过期。

相关推荐
oradh2 小时前
Oracle数据库控制文件的概述
数据库·oracle·控制文件·oracle控制文件·oracle基础知识·oracle数据库控制文件概述
豆沙沙包?2 小时前
SpringCloud01-03---简介/从单体到集群架构/从单体到分布式架构
分布式·微服务·架构·springcloud
阳光九叶草LXGZXJ2 小时前
自制数据库迁移工具-C版-07-HappySunshineV1.6-(支持PG、达梦、Gbase8a)
linux·c语言·开发语言·数据库·学习·postgresql
JoneBB2 小时前
ABAP上传EXCEL模板并将内表内容存到两个sheet中
java·前端·数据库
会编程的吕洞宾2 小时前
跳表_Skip_List_的_凌云九阶阵__从概率平衡到_Redis
数据结构·redis·list
humors2212 小时前
免费云服务清单
服务器·网络·数据库·免费·云服务·网站·带宽
敖正炀2 小时前
分布式系统设计流程与实战推演
分布式
lolo大魔王2 小时前
Go 语言数据库操作|GORM 实现 CRUD 超详细实战
数据库·golang
网管NO.12 小时前
SQL 是什么?
数据库·sql