news 2026/4/23 13:19:48

Redis 常见的面试专题:缓存击穿、缓存雪崩、缓存穿透、什么是布隆过滤器、什么是延时双删、持久化的方式、Redis 分布式锁、I/O 多路复用等等

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Redis 常见的面试专题:缓存击穿、缓存雪崩、缓存穿透、什么是布隆过滤器、什么是延时双删、持久化的方式、Redis 分布式锁、I/O 多路复用等等

Redis 常见的面试专题确实非常高频,几乎每家大厂/中大型公司后端/架构岗面试都会深挖。下面我把你列的这些点(缓存击穿、缓存雪崩、缓存穿透、布隆过滤器、延时双删、持久化方式、Redis 分布式锁、I/O 多路复用)全部覆盖,结合2025–2026年的主流实践和面试话术,给出定义 + 成因 + 危害 + 解决方案 + 代码示例 + 面试加分点的完整梳理。

1. 缓存穿透(Cache Penetration)

定义:查询一个根本不存在的数据,缓存和数据库都没有命中,导致请求每次都打到数据库。

成因:恶意攻击(大量不存在的key)、业务代码bug(参数校验缺失)、爬虫。

危害:数据库瞬间压力暴增,甚至宕机。

解决方案(主流优先级排序):

  1. 缓存空对象(最常用,简单有效)

    • 查询不到时缓存 “null” 或空字符串,设置短过期时间(30s~5min)
    • 优点:实现简单
    • 缺点:占用内存(可用短TTL缓解)、可能污染缓存
  2. 布隆过滤器(高并发、大数据量首选)

    • 在缓存前加一层布隆过滤器,先判断key“一定不存在”就直接返回
    • 优点:内存占用极小(1亿条数据约几十MB)、查询O(1)
    • 缺点:有误判(假阳性)、不支持删除(Redis原生布隆支持有限,可用布谷鸟过滤器)
  3. 接口层参数校验 + 限流

面试话术

“我一般优先用缓存空对象 + 短TTL,简单可靠;如果QPS很高且key空间很大,再引入Redis布隆过滤器(bloom filter module 或 redisson的R bloom filter),误判率控制在1%以内。”

2. 缓存击穿(Cache Breakdown / Hot Key失效)

定义:某个热点key突然失效,大量并发同时请求,瞬间全部打到数据库。

成因:热点数据刚好过期 + 高并发访问。

危害:数据库短时压力激增。

解决方案(主流三种):

  1. 互斥锁(分布式锁最常见)

    • 缓存miss → 获取分布式锁 → 只有一个线程去查DB → 回写缓存 → 释放锁
    • 其他线程自旋或sleep后重试
  2. 逻辑过期 / 永不过期 + 异步刷新

    • key不设TTL,value里带一个逻辑过期时间
    • 发现过期 → 异步线程去刷新 → 当前请求返回旧数据
  3. 热点key预加载 / Redis热点key自动发现 + 永不过期

代码示例(Redisson分布式锁):

Stringkey="hot:item:"+itemId;RLocklock=redisson.getLock("lock:"+key);Stringvalue=redisTemplate.opsForValue().get(key);if(value==null){try{if(lock.tryLock(10,TimeUnit.SECONDS)){// 尝试获取锁value=redisTemplate.opsForValue().get(key);// 双重检查if(value==null){value=db.queryItem(itemId);// 查库redisTemplate.opsForValue().set(key,value,30,TimeUnit.MINUTES);}}}finally{lock.unlock();}}returnvalue;

面试加分:提到“Redisson看门狗机制自动续期,避免业务执行时间长导致锁提前释放”。

3. 缓存雪崩(Cache Avalanche)

定义:同一时间大量key同时失效(或Redis宕机),导致海量请求瞬间打到数据库。

成因:统一设置了相同的过期时间、Redis全挂。

危害:数据库直接崩。

解决方案(多层防御):

  1. 过期时间加随机值(最基础)

    • expire = 基础时间 + Random(0~300)秒,错开失效
  2. 多级缓存(本地 + Redis + 数据库)

  3. 限流 / 熔断 / 降级(Hystrix、Sentinel、Resilience4j)

  4. Redis高可用(主从 + 哨兵 / Cluster)

  5. 热点数据永不过期 + 定时任务刷新

面试话术

“我项目里用的是随机过期 + Sentinel + 熔断降级三保险;极端情况下本地缓存兜底。”

4. 布隆过滤器(Bloom Filter)

定义:一种空间高效的概率型数据结构,用于判断一个元素是否可能存在于集合中。

核心思想:多个哈希函数 → 映射到bit数组的不同位 → 全1才可能存在。

优点:极省内存、查询O(k)(k为哈希函数个数)
缺点:有假阳性(一定不存在→一定不存在;可能存在→大概率存在)、不支持删除(原生)

Redis中的实现

  • Redis 6+ 自带BF.ADDBF.EXISTS(ReBloom模块)
  • Redisson 也有 RBloomFilter

面试常问:误判率怎么算?(约 (1 - e(-n*k/m))k ,m=bit位数,n=元素数,k=哈希函数数)

5. 延时双删(延迟双删策略)

定义:更新数据库后,先删缓存 → 延迟(几百ms~几秒)再删一次缓存。

适用场景Cache Aside模式下,写操作导致读-写不一致。

为什么两次删

  • 第一次删:更新DB前删,防止旧数据被读
  • 延迟第二次删:更新DB和删缓存之间有短暂时间差,可能有并发读把旧数据又写回缓存 → 延迟再删一次

代码示例(典型实现):

// 更新商品publicvoidupdateItem(Itemitem){// 1. 先删缓存redisTemplate.delete("item:"+item.getId());// 2. 更新数据库itemMapper.update(item);// 3. 延迟双删(异步或定时任务)Thread.sleep(500);// 或用DelayQueue / MQ 延迟redisTemplate.delete("item:"+item.getId());}

面试话术

“延时双删是Cache Aside下比较折中的方案;如果追求最终一致性,可结合Canal + MQ监听binlog异步删缓存;强一致性场景用分布式锁 + 读写锁。”

6. Redis 持久化方式

方式机制优点缺点丢失数据窗口恢复速度生产推荐
RDB定时快照(fork子进程)文件小、恢复快可能丢数据最后一次快照后辅助
AOF记录每条写命令数据最安全(fsync策略)文件大、恢复慢取决于fsync主用
混合持久化AOF + RDB preamble恢复快 + 安全Redis 4.0+折中较快首选

Redis 7+:Multi-part AOF(分片AOF),rewrite更高效。

面试话术

“生产我基本用混合持久化:appendfsync everysec + aof-use-rdb-preamble yes,丢失最多1秒,恢复速度比纯AOF快很多。”

7. Redis 分布式锁

实现方式对比

方案实现命令优点缺点 / 风险推荐场景
setnx + expiresetnx + expire简单非原子、过期后可能误删他人锁学习演示
Lua脚本set + px + nx原子性业务执行时间 > 锁超时 → 误删中小型项目
RedissonRedissonLock看门狗自动续期、可重入依赖Redisson依赖生产首选
Redlock多节点多数派更高可用实现复杂、争议大(时间同步、网络分区)极高一致性需求

Redisson看门狗:默认每10s续期一次(锁超时时间1/3),线程存活就一直续。

8. I/O 多路复用(Redis为什么单线程还这么快)

核心:Redis 6前基本单线程(主线程处理命令),靠I/O多路复用 + 内存操作 + 高效数据结构实现高性能。

演进

  • Redis 6前:单线程 + select/poll/epoll/kqueue
  • Redis 6+:多线程I/O(网络读写多线程,主逻辑仍单线程)

为什么快

  1. 内存操作(非磁盘)
  2. I/O多路复用(单线程处理成千上万连接)
  3. 高效SDS、ziplist、跳表、哈希表等数据结构
  4. 渐进式rehash、无锁(单线程)

面试话术

“Redis单线程模型避免了线程切换和锁竞争开销,结合epoll/kqueue实现了真正的非阻塞I/O,所以QPS能轻松上10w+。”

总结 & 面试应对建议

  • 三大缓存问题:穿透(布隆/空值)、击穿(分布式锁/逻辑过期)、雪崩(随机过期+限流熔断)
  • 一致性:延时双删(折中)、Canal+MQ(最终一致)、分布式锁(强一致)
  • 高可用:持久化选混合、分布式锁用Redisson、I/O多路复用是性能基石

你最想深入哪个点?
A. Redisson分布式锁源码级剖析(看门狗 + 可重入 + 续期)
B. 布隆过滤器误判率计算 + Redis实现代码
C. 真实生产案例:如何处理线上缓存雪崩/击穿事故
D. Redis 7+ 新特性对这些问题的影响(Multi-part AOF、函数等)
E. 三大问题完整Java + Spring Boot + Redisson实现Demo

告诉我字母,我继续展开!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/8 22:09:29

【Django毕设源码分享】Django的基于web的共青团员信息管理系统的设计与实现的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/4/23 11:32:40

云服务器CVM 云主机 云计算服务器 弹性云服务器-腾讯云

云服务器CVM概述腾讯云服务器CVM(Cloud Virtual Machine)是一种弹性计算服务,提供可扩展的虚拟化计算资源。用户无需购买物理硬件,即可快速部署应用,支持按需付费和灵活配置。CVM适用于Web应用、大数据分析、游戏服务等…

作者头像 李华
网站建设 2026/4/8 18:51:30

云服务器哪家好用又实惠?一文读懂四大实惠云服务商深度解析

云服务器性价比对比:四大主流服务商解析选择云服务器时,需综合考虑性能、价格、稳定性及售后服务。以下对阿里云、腾讯云、华为云和AWS(亚马逊云)四大服务商进行深度对比,涵盖适用场景、价格策略及核心优势。阿里云&am…

作者头像 李华
网站建设 2026/4/22 21:55:21

适合ASMR创作的细腻音效库有哪些?(2026最新推荐)

根据艾瑞咨询发布的《2025年中国音频内容市场研究报告》,ASMR内容消费量年均增长率达24%,用户对音效质感的敏感度显著提升。这份报告指出,高品质的细腻音效库如同创作者的调色盘,能赋予作品独特的听觉指纹。在2026年,A…

作者头像 李华
网站建设 2026/4/2 2:41:29

让Agent画思维导图稳固长期记忆:新框架实现稳定长期学习,准确率提升38%

传统RAG在“长期记忆管理”和“持续学习承载能力”两个层面,正在同时暴露出结构性瓶颈。 思维导图曾被证明可以帮助学习障碍者快速提升成绩,那么当前已经可堪一用的智能体系统如果引入类似工具是否可以帮助改善长期学习记忆能力呢?有研究团队…

作者头像 李华
网站建设 2026/4/18 14:43:30

想要随时随地做账务自动化任务就用青龙面板+cpolar

青龙面板是一款能自动化执行 JavaScript、Python、Shell 等脚本的管理工具,支持 Linux、Windows、macOS 等系统,通过网页端即可轻松管理定时任务,适合程序员、办公族、数据采集爱好者等需要处理重复性任务的人群,其优点在于无需频…

作者头像 李华