Skip to content

Redis 面试高频题总索引

本文件汇总 14 个章节的高频面试题,按章节归类、按难度标星。 每题完整答案(含「考察点 / 标准答案 / 加分项 / 易错点」)请跳转到对应章节文档的「面试高频题」小节查看。


难度图例

  • ⭐ 入门必会(基础题)
  • ⭐⭐ 进阶常考
  • ⭐⭐⭐ 大厂高频
  • ⭐⭐⭐⭐ 资深岗位 / 字节阿里腾讯一面必问

第 1 章 · Redis 是什么 & 为什么快

详细答案见 01_intro.md

#题目难度关键词
1Redis 为什么这么快?⭐⭐⭐内存 / 单线程 / IO 多路复用 / 数据结构
2Redis 是单线程的,为什么还能这么快?⭐⭐⭐网络 IO 瓶颈 / O(1) 命令 / 无锁
3Redis 6.0 的多线程是真的多线程吗?解决了什么?⭐⭐⭐⭐IO 多线程 / 命令执行仍单线程
4什么是 IO 多路复用?select / poll / epoll 区别?⭐⭐⭐epoll / 红黑树 / 就绪链表 / O(1)
5Redis 是 KV 数据库,是不是只能存字符串?5+3 类型 / Stream
6Redis 和 Memcached 怎么选?⭐⭐数据类型 / 持久化 / 集群

第 2 章 · 五大基础数据类型

详细答案见 02_basic_types.md

#题目难度关键词
1Redis 的 String 最大能存多大?为什么?⭐⭐512MB / 大 Key 危害
2embstr 和 raw 的区别?为什么是 44 字节?⭐⭐⭐⭐jemalloc / 一次 malloc / 只读
3Hash 的底层是什么?什么情况转 hashtable?⭐⭐⭐listpack / 128 阈值 / 不可逆
4ZSet 为什么用跳表不用红黑树?⭐⭐⭐⭐范围查询 / 实现简单 / 并发友好
5Set 和 ZSet 都能去重,怎么选?⭐⭐内存 / 是否需要排序
6用 Redis 实现排行榜怎么做?⭐⭐⭐ZINCRBY / 同分技巧 / 分桶

第 3 章 · 三大特殊数据类型

详细答案见 03_special_types.md

#题目难度关键词
11 亿用户签到状态用什么类型存?⭐⭐⭐Bitmap / 12.5MB / SETBIT
2HLL 原理?为什么 12KB 估算 2^64?⭐⭐⭐⭐16384 桶 / 调和平均 / 0.81% 误差
3Redis Geo 怎么实现的?为什么用 ZSet?⭐⭐⭐⭐GeoHash / 整数 score / 二分编码
41 亿 UV 用 Set 还是 HLL?⭐⭐⭐16GB vs 12KB / 精确 vs 估算
5Bitmap 适合做什么?什么时候不能用?⭐⭐稠密布尔 / offset 警惕
6怎么实现「附近 1km 的店」?⭐⭐⭐GEOSEARCH / 集群 HashTag

第 4 章 · Key 设计与命令进阶

详细答案见 04_key_design.md

#题目难度关键词
1为什么生产禁用 KEYS *?用什么替代?⭐⭐⭐主线程阻塞 / SCAN / rename-command
2SCAN 有哪些「不保证」?⭐⭐⭐重复返回 / COUNT 是 hint / 反向二进制
3DEL 和 UNLINK 的区别?⭐⭐⭐同步 vs 异步 / BIO 线程 / 大 Key 必用
4Redis 怎么删除过期 Key?⭐⭐⭐惰性 + 定期 / hz=10 / 不存在「定时删除」
5SET 命令会改变过期时间吗?⭐⭐⭐⭐默认清除 TTL / KEEPTTL / RENAME 继承
6怎么发现并解决大 Key 问题?⭐⭐⭐⭐bigkeys / rdb-tools / 拆分 / UNLINK

第 5 章 · 过期与内存淘汰

详细答案见 05_expire_eviction.md

#题目难度关键词
1Redis 怎么删除过期 Key?为什么用「惰性 + 定期」组合?⭐⭐⭐惰性 + 定期 / hz=10 / expireIfNeeded / 没有定时删除
28 种内存淘汰策略分别什么时候用?⭐⭐⭐noeviction / allkeys-lru / volatile-lfu / volatile-ttl / 决策树
3LRU 和 LFU 的区别?Redis 怎么近似实现 LRU 的?⭐⭐⭐⭐24 bit lru 字段 / 采样 5 / 淘汰池 16 / Morris 计数器
4为什么 Redis 不维护一个真正的 LRU 链表?⭐⭐⭐16 字节指针开销 / 1 亿 Key = 1.6GB / 采样精度 95%+
5主从复制下,从节点会主动删除过期 Key 吗?⭐⭐⭐⭐从节点不主动删 / 主节点 DEL 同步 / 3.2 后返回 nil
6缓存场景该用 allkeys-lru 还是 volatile-lru?为什么?⭐⭐⭐allkeys-lru 推荐 / volatile-* 的 OOM 陷阱 / 物理隔离

第 6 章 · 持久化:RDB / AOF / 混合

详细答案见 06_persistence.md

#题目难度关键词
1RDB 和 AOF 的区别?怎么选?⭐⭐⭐快照 / 命令日志 / 混合持久化 / 选型
2BGSAVE 时如果有客户端写入会怎样?COW 的原理是什么?⭐⭐⭐⭐fork / 页表 / Copy-On-Write / 内存翻倍
3AOF 三种刷盘策略各有什么权衡?⭐⭐⭐always / everysec / no / write vs fsync
4AOF 重写是怎么做到不阻塞主线程的?⭐⭐⭐⭐子进程 / 双写缓冲 / multi-part AOF
5混合持久化解决了什么问题?⭐⭐⭐RDB 头 + AOF 尾 / 恢复快 + 数据全
6Redis 重启后数据从哪里恢复?⭐⭐AOF 优先 / appendonly / redis-check-aof

第 7 章 · 事务、Pipeline、Lua、Pub-Sub、Stream

详细答案见 07_transaction_pipeline.md

#题目难度关键词
1Redis 事务支持回滚吗?为什么?⭐⭐⭐MULTI/EXEC / 不支持回滚 / antirez 设计取舍
2WATCH 是怎么实现乐观锁的?⭐⭐⭐CAS / watched_keys / DIRTY_CAS 标记
3Pipeline 和事务的区别?⭐⭐客户端优化 vs 服务端语义 / 无原子性
4为什么用 Lua 脚本能实现「读改写」原子性?⭐⭐⭐主线程串行 / 脚本不被打断 / EVAL
5Pub/Sub 为什么不能用作消息队列?Stream 解决了什么?⭐⭐⭐⭐不持久化 / 无 ACK / Stream PEL / Group
6Stream 的 Consumer Group 与 Kafka 有什么异同?⭐⭐⭐⭐协作消费 + 多 Group 扇出 / 分区与 ACK 粒度

第 8 章 · 主从复制

详细答案见 08_replication.md

#题目难度关键词
1Redis 主从复制的全量同步流程是怎样的?⭐⭐⭐PSYNC ? -1 / FULLRESYNC / BGSAVE / RDB 传输 / 增量补齐
2增量同步是怎么做到「断点续传」的?⭐⭐⭐⭐replid + offset / backlog / CONTINUE
3复制积压缓冲区(backlog)的作用?设置多大合适?⭐⭐⭐环形 byte buffer / 写速率 × 容忍秒数 / 64MB 起步
4主从异步复制有什么问题?怎么实现强一致?⭐⭐⭐⭐异步丢数据 / WAIT / min-replicas-to-write
5读写分离会有什么坑?⭐⭐⭐写后读旧 / 主从延迟 / loading stale / 写后短期路由到主
6主从延迟怎么排查和优化?⭐⭐⭐master-slave offset 差 / 慢命令 / repl-disable-tcp-nodelay

第 9 章 · 哨兵 Sentinel 高可用

详细答案见 09_sentinel.md

#题目难度关键词
1哨兵的核心作用是什么?为什么至少要 3 个?⭐⭐⭐监控 / 通知 / 故障转移 / 防脑裂 / 奇数
2SDOWN 和 ODOWN 的区别?⭐⭐⭐主观下线 / 客观下线 / quorum / down-after
3哨兵是怎么选 Leader 的?⭐⭐⭐⭐Raft-like / epoch / 一票制 / majority
4新主节点是按什么规则选出来的?⭐⭐⭐⭐5 步过滤:在线 → 响应 → priority → offset → runid
5故障转移期间客户端的请求会失败吗?怎么处理?⭐⭐⭐+switch-master 订阅 / Sentinel SDK / 重试 + 退避
6哨兵 + 主从 vs Cluster 集群,怎么选?⭐⭐⭐数据量 / 写 QPS / 运维复杂度

第 10 章 · Cluster 集群与数据分片

详细答案见 10_cluster.md

#题目难度关键词
1Redis Cluster 是怎么分片的?⭐⭐⭐16384 槽 / CRC16 / 哈希槽
2为什么是 16384 个槽而不是 65536?⭐⭐⭐⭐心跳带宽 2KB / 节点上限 1000 / 压缩率
3一致性哈希和哈希槽的区别?为什么 Redis 选哈希槽?⭐⭐⭐⭐精确控制迁移 / 元信息紧凑 / HashTag
4MOVED 和 ASK 的区别?⭐⭐⭐永久重定向 vs 临时迁移 / ASKING 通行证
5集群下能用事务/Lua 吗?HashTag 怎么用?⭐⭐⭐CROSSSLOT / {tag} / 同槽路由
6Cluster 和哨兵该怎么选?⭐⭐⭐数据规模 / 写吞吐 / 运维复杂度
7HashTag 滥用会有什么问题?⭐⭐⭐⭐单槽热点 / 数据倾斜 / 迁移困难

第 11 章 · 分布式锁

详细答案见 11_distributed_lock.md

#题目难度关键词
1怎么用 Redis 实现分布式锁?给出完整命令⭐⭐⭐SET key value NX EX / Lua 释放
2为什么释放锁要用 Lua 脚本?⭐⭐⭐⭐校验持有者 + 删除原子 / 防误删
3锁的「续命」问题是什么?怎么解决?⭐⭐⭐⭐看门狗 / Redisson / 守护线程定期续期
4Redlock 是什么?为什么有争议?⭐⭐⭐⭐N 实例 / majority / Kleppmann vs antirez / fencing token
5主从复制的 Redis 实现锁有什么风险?⭐⭐⭐⭐异步复制丢锁 / 双客户端持锁
6分布式锁 Redis 和 Zookeeper 怎么选?⭐⭐⭐AP vs CP / 性能 vs 强一致 / 业务可用性容忍

第 12 章 · 缓存设计三大问题 + 一致性

详细答案见 12_cache_problems.md

#题目难度关键词
1缓存穿透/击穿/雪崩的区别和解决方案?⭐⭐⭐不存在 / 单热点过期 / 大量同时过期 / 三套防御
2布隆过滤器的原理?误差从哪来?⭐⭐⭐⭐k 个 hash / m 位数组 / 假阳性公式
3「先更新数据库还是先删缓存」?为什么?⭐⭐⭐⭐先 DB 后删 Cache / 4 种顺序时序辨析
4延迟双删是什么?解决了什么问题?⭐⭐⭐更 DB → 删 Cache → sleep → 再删 / 主从延迟
5Cache Aside 模式下如何保证强一致?⭐⭐⭐⭐几乎不可能 / 业务可接受最终一致 / 强一致走 DB
6用 Binlog 同步缓存有什么优劣?⭐⭐⭐⭐Canal / 解耦 / 延迟 / 顺序 / 幂等

第 13 章 · 性能优化、监控与排障

详细答案见 13_optimization.md

#题目难度关键词
1怎么定位 Redis 变慢?给出排查思路⭐⭐⭐⭐4 层定位:客户端 / 网络 / 主线程 / OS
2SLOWLOG 怎么用?看哪些字段?⭐⭐⭐slower-than 1ms / id / duration / command / client
3内存碎片率多少算正常?怎么处理?⭐⭐⭐mem_fragmentation_ratio / 1.0~1.5 / activedefrag
4Redis 为什么要 fork?fork 耗时长的原因?⭐⭐⭐⭐BGSAVE / AOF 重写 / 页表大小 / latest_fork_usec
5哪些命令会阻塞主线程?怎么避免?⭐⭐⭐KEYS / HGETALL / SORT / Lua 超时 / SCAN 系列
6一个 8 核 32G 的 Redis 单机最多能扛多少 QPS?⭐⭐⭐⭐10 万 QPS / Pipeline 提升 / 网络 + CPU 瓶颈

第 14 章 · 综合实战:秒杀系统

完整代码 + 架构见 14_seckill.md

本章是进阶思考题而不是面试题(综合应用前 13 章知识,开放式设计):

#题目难度关键词
1如果库存有 1000 万件怎么办?⭐⭐⭐⭐分桶 / 哈希分片 / 多 Redis 实例
2如果要支持「先到先得排队」怎么实现?⭐⭐⭐⭐List 排队 / Stream 顺序消费
3怎么防机器人脚本?⭐⭐⭐验证码 / 答题 / 人机识别 / IP 限流
4多机房部署怎么保证全局库存正确?⭐⭐⭐⭐中心库存 + 本地缓存 / 单元化 / Redis 跨机房同步

附加面试题(综合性问题):

#题目难度关键词
5秒杀系统怎么防止超卖?⭐⭐⭐Lua 原子扣减 / WATCH / DECR 后回滚对比
6Redis 在秒杀架构中扮演什么角色?怎么和 MQ 配合?⭐⭐⭐⭐库存前置 / Stream 异步下单 / 削峰填谷

推荐刷题顺序

第一遍按章节顺序刷,建立体系;第二遍按下面的「话题串联」刷,覆盖跨章节的综合题:

  1. 「快」相关:Ch1 Q1/Q2/Q3/Q4 → Ch2 数据结构 → Ch7 Pipeline/Lua → Ch13 性能优化
  2. 「持久化」相关:Ch6 RDB/AOF → Ch5 内存淘汰 → Ch8 复制
  3. 「高可用」相关:Ch8 主从 → Ch9 哨兵 → Ch10 集群
  4. 「真实场景」相关:Ch4 大 Key/SCAN → Ch11 分布式锁 → Ch12 三大缓存问题 → Ch14 秒杀
  5. 「面试连环炮」典型组合
    • Redis 为什么快?→ 单线程会有什么问题?→ 6.0 多线程解决什么?→ 一个命令阻塞主线程会怎样?
    • String 怎么存的?→ embstr 边界?→ 大 Key 怎么治理?→ UNLINK 是怎么做的?
    • 缓存击穿怎么办?→ 加分布式锁怎么做?→ 锁过期了怎么办?→ Redlock 是什么?→ 为啥有争议?
    • 主挂了怎么办?→ 哨兵是什么?→ 怎么选 Leader?→ 选错主会有什么问题?→ Cluster 又怎么解决?

速查:本教程统计

  • 14 个章节 × 约 6 道高频题 = 80+ 道
  • 每章配套:学习文档(500-1000 行) + 2-7 个 Python 代码 + 单文件交互式 demo.html
  • 总产出:约 4 万行内容,覆盖 Redis 从入门到资深全部知识点