Redis 面试冲刺:30 问浓缩成一张网,答不上来的都在这

0 阅读6分钟

Redis 面试冲刺:30 问浓缩成一张网,答不上来的都在这

作者:鱼宵 | 实战驱动系列 · 第 11 篇(Redis 系列收官)

完整课程与可运行源码已开源在 Gitee:gitee.com/j67mk2/redi… (本文对应 lesson-10/,含《Redis 高频面试 30 问》完整版与《简历包装话术》)


一、别背题,先把 Redis 复习成三层金字塔

Redis 面试点太多,硬背容易串。按三层来复习:

           /\
          /  \   第三层:生产高可用(主从/哨兵/集群/脑裂)
         /----\       ← 能讲清"为什么这么部署"就够
        /      \
       / 第二层 \   第二层:缓存三大坑 + 分布式锁 + 持久化
      /----------\      ← 面试重点,要能动手+能讲原理
     /            \
    /  第一层 基础  \  第一层:为什么快 + 五大类型 + 底层结构
   /----------------\   ← 这层答不上,后面全白搭

类比:盖楼。 第一层是地基(为什么快、数据结构),第二层是承重墙(缓存坑、锁、持久化),第三层是楼顶装修(集群、哨兵)。面试官先踩地基,地基塌了直接 pass。


二、一张表串起 10 课(面试一句话答案)

课主题一句话答案
L1入门Redis 是内存 KV 存储,单线程,QPS 轻松 10w+
L2五大类型String/Hash/List/Set/ZSet,按场景选
L3底层结构String=SDS、List=quicklist、ZSet=跳表+哈希
L4过期与淘汰惰性+定期删过期;内存满了按 LRU/LFU 淘汰
L5缓存三大坑穿透(布隆)/击穿(互斥锁)/雪崩(随机过期)
L6分布式锁SET NX EX + Lua 释放;Redisson 看门狗续期
L7持久化高可用RDB/AOF、主从、哨兵、Cluster 16384 槽
L8事务与 LuaMULTI/EXEC 不是真事务;Lua 才原子
L9场景实战排行榜 ZSet、限流 Lua、附近 GEO、布隆挡穿透
L10面试冲刺本课:速查清单 + 30 问 + 简历话术

三、10 道最高频题速答(完整 30 问在仓库 lesson-10)

Q1:Redis 为什么那么快? ① 纯内存操作;② 单线程避免锁竞争和上下文切换;③ IO 多路复用(epoll)扛高并发连接;④ 高效数据结构(跳表/哈希表)。

Q2:单线程为什么还快?瓶颈在哪? 没有锁竞争、没有上下文切换;瓶颈不在 CPU 而在网络/内存,单线程足够。6.0 的多线程只是把"网络读写/协议解析"分给多线程,真正执行命令还是单线程。

Q3:五大类型底层? String=SDS;Hash=哈希表;List=quicklist(双向链表+ziplist);Set=哈希表;ZSet=跳表+哈希表。ZSet 用跳表因为实现简单、范围查询友好。

Q4:缓存穿透、击穿、雪崩? 穿透=查不存在的数据(布隆过滤器/缓存空值);击穿=热点 key 过期瞬间被打爆(互斥锁/逻辑过期);雪崩=大量 key 同时过期或宕机(随机过期/多级缓存/集群)。

Q5:缓存一致性怎么做? Cache Aside:先更新数据库,再删缓存;延迟双删(删缓存→更新 DB→等一段时间再删一次)兜底极端并发。

Q6:SET NX EX 为什么要一条命令? 分两条(SETNX + EXPIRE)中间崩了,key 永不过期,锁就死锁了;一条命令原子完成。释放锁必须用 Lua:先 GET 比对 value 是不是自己的 UUID,是才 DEL——否则会把别人抢到的锁删了。

Q7:Redisson 看门狗是啥? 锁快到期但业务还没跑完时,自动续期(默认每 10 秒续到 30 秒),防止"锁过期了但业务还在跑"。

Q8:RDB 和 AOF 怎么选? RDB=拍快照,恢复快但可能丢最后一次快照后的数据;AOF=记每条写命令,丢得少但文件大恢复慢。生产一般开混合持久化(AOF 重写时前面用 RDB 二进制、后面追加命令)。

Q9:Redis Cluster 为什么 16384 个槽? ① 心跳包带槽位图,16384 位=2KB,65536 位=8KB,越小带宽压力小;② 集群一般不超过 1000 个节点,16384 槽足够散列。MOVED=槽归属别的节点,ASK=迁移中。

Q10:MULTI/EXEC 是真事务吗? 不是。只是"打包顺序执行":中途出错不回滚、不隔离;WATCH 是乐观锁;要原子性用 Lua。


四、自查清单(面试前一天跑一遍)

能脱口而出的打勾,答不上来的回去翻对应课:

  • Redis 是什么?内存 KV 储物柜,单线程,快
  • 五大类型各干什么用?
  • String 底层是 SDS,不是 char[]
  • ZSet 为什么用跳表不用平衡树?
  • 过期删除:惰性+定期,为什么两个一起用?
  • 缓存穿透/击穿/雪崩 + 解法
  • SET NX EX 为什么一条命令?释放为什么用 Lua?
  • RDB vs AOF 怎么选?AOF 重写干嘛?
  • 主从复制全量/增量?哨兵故障转移?Cluster 槽?
  • 排行榜用 ZSet、限流用 Lua、附近的人用 GEO、布隆挡穿透

五、简历话术(怎么把 10 课写进简历)

别写"熟悉 Redis"四个字就完事,用 STAR + 数字:

项目:××× 系统

  • 使用 Redis 作为缓存层,QPS 从 500 提升至 5000+(量化);
  • 基于 SET NX EX + Lua 实现分布式锁,解决并发下单超卖问题(场景 + 方案);
  • 通过布隆过滤器 + 空值缓存解决缓存穿透,DB 压力下降 40%(数字);
  • 使用 ZSet 实现实时排行榜,TopN 查询耗时 < 5ms(技术点 + 数字)。

被追问时的心态:面试官问"为什么快/为什么用 Lua/误判方向"——答案都在上面 10 道速答里。诚实说"这是我个人项目里的实现"比背八股更打动人。


六、挑战题(面试前的最后演练)

  1. ⭐ 把仓库里的《Redis 高频面试 30 问》打印出来,盖住答案列,每题限时 30 秒说"结论一句话",说不出来的标红,明天再过一遍。
  2. ⭐⭐ 挑 3 道最不熟的题(RedLock、脑裂、AOF 重写),去对应 lesson 的 README 翻一遍,用自己的话写一段 100 字答案。
  3. ⭐⭐⭐ 模拟一次面试:让朋友从 30 问里随机抽 10 道连问,录音听完,找自己"嗯…那个…就是…"的口头禅。

七、面试回答模板(收官版)

面试官:你简历写了"熟悉 Redis",说说你实际用它做了什么?

我在×××项目里用 Redis 做了三层事:一是缓存层(String 存热点数据,用布隆过滤器挡穿透);二是分布式锁(SET NX EX + Lua 释放,解决超卖);三是实时排行榜(ZSet,TopN 毫秒级)。数据量 X,QPS 从 X 提到 X。


关于这个系列

本文是「Java 后端实战精通营」Redis 系列的收官篇(第 11 篇)。

Redis 实战精通营(10 课)已全部开源:gitee.com/j67mk2/redi…

本系列完整篇目:分布式锁 → 缓存一致性 → 事务与 Lua → Redis 高可用 → 为什么快 → 企业级场景 → 入门 → 数据结构 → 持久化 → 过期淘汰 → 面试冲刺(本篇)。

学完这 10 课,你已经能回答简历上"熟悉 Redis"背后 80% 的追问。剩下 20%(RedLock 生产到底用不用、脑裂真实案例),进公司读线上故障复盘文档补最快。

下一篇预告:新系列开启——Java 后端实战的下一站(Dubbo / JVM / JUC / RocketMQ / MySQL / ES 陆续发布),先关注不迷路。

跑完有任何问题,评论区见,一起排查。