【Redis】 缓存实战:穿透、击穿、雪崩与典型应用

【Redis】 缓存实战:穿透、击穿、雪崩与典型应用 Redis 缓存实战穿透、击穿、雪崩与典型应用一句话把 Redis 当缓存用时真正的考点不是「会存会取」而是缓存失效时怎么保护后面的数据库。这一篇专攻面试最高频的缓存三大问题与工程落地。一、缓存层回顾为什么是 Redis上一篇已详述Redis 把热点数据放内存请求先查 Redis命中则直接返回、未命中才查 DB 再写回。它最常见的身份就是缓存层用来挡在 MySQL 前面扛高并发读。本篇假设你已经理解「为什么用 Redis」直接进入缓存工程的核心问题。二、缓存三大经典问题1. 缓存穿透现象查一个根本不存在的数据如 id-1缓存没有 → 每次都打 DB缓存形同虚设DB 被压垮。解决缓存空值查不到也存个null设短过期如 1~5 分钟防止同 key 反复穿透。布隆过滤器在缓存前加一层快速判断「这个 id 是否存在」不存在直接拦截。接口/参数校验非法 id 直接拒绝。2. 缓存击穿现象某个热点 key突然过期瞬间大量并发请求同时发现缓存没了一起打到 DB。解决互斥锁单体第一个线程查 DB 时加锁其他线程等它把数据重建回缓存。// 伪代码单机用 synchronized / Redis SET NX 都行if(cacheMiss){if(tryLock(key)){datadb.query();cache.set(key,data);unlock(key);}else{sleepAndRetry();}}逻辑过期key 不真正过期而是在 value 里存过期时间发现「逻辑过期」后开一个线程异步重建当前请求先返回旧值。热点 key不过期或后台定时刷新。3. 缓存雪崩现象大量 key 在同一时间集中过期或者Redis 整体宕机请求全压到 DBDB 瞬间被打崩。解决过期时间加随机值避免同时失效expire base random。Redis 高可用主从 哨兵 / 集群单机挂了还有替补。多级缓存本地缓存Caffeine RedisRedis 挂了还有本地兜底。限流降级DB 扛不住时对非核心接口限流或返回降级结果。三者区别一句话穿透是「查不存在的」击穿是「一个热点过期」雪崩是「一大批同时失效/整体挂」。三、典型应用场景缓存最主流热点数据、会话、配置。Session 共享分布式部署下把登录状态放 Redis任意节点都能读。排行榜ZSet 天然有序。计数器 / 限流INCR原子自增接口限流、点赞数。分布式锁SET key value NX EX配合 Redisson 的看门狗自动续期更稳。四、Java 后端怎么用了解即可Spring Data RedisRedisTemplate/StringRedisTemplate操作各种类型。缓存注解Cacheable、CacheEvict声明式缓存。分布式锁生产用Redisson比手写SET NX可靠自动续期、可重入。分布式锁的深入实现看门狗续期、可重入、红锁 RedLock属于「Redis 进阶」后续单独成篇。总结缓存三件套是面试高频务必能口述。记住三句话穿透查不存在的布隆过滤器/缓存空值、击穿一个热点过期互斥锁/逻辑过期、雪崩一大批同时失效或整体挂随机过期/高可用/多级缓存。。