下面给你一份企业级面试常考 Redis 题目体系,不是零散八股,而是按照 “原理 → 架构 → 高可用 → 性能 → 生产问题” 组织的。这套你如果掌握,基本可以覆盖 90% 后端面试。
一、Redis 核心原理类(必考)
1. Redis 为什么快?
标准答案必须包含:
- 内存存储
- 单线程事件循环(无锁)
- IO 多路复用(epoll/kqueue)
- 数据结构高度优化(ziplist, quicklist, skiplist)
2. Redis 为什么用单线程还能扛高并发?
要点:
- 瓶颈在 IO,不在 CPU
- 避免锁竞争
- pipeline + 批量命令
3. Redis 6 以后为什么又引入多线程?
面试官想听:
网络 IO 多线程,命令执行仍是单线程
4. Redis 有哪些数据结构?
你要答两层:
- 表层:String, Hash, List, Set, ZSet
- 底层:SDS, dict, ziplist, listpack, skiplist, intset
二、持久化(极高频)
5. RDB 和 AOF 的区别?
| 维度 | RDB | AOF |
| 性能 | 高 | 低 |
| 数据安全 | 秒级丢失 | 1 秒丢失 |
| 恢复速度 | 快 | 慢 |
| 可读性 | 否 | 是 |
进阶:
生产环境 = AOF + RDB 混合
6. AOF 为什么要 rewrite?
答:
避免日志无限增长,合并多次修改为一次最终状态
7. Redis 重启恢复顺序?
先 AOF,再 RDB(如果都开)
三、缓存架构(面试重灾区)
8. 什么是缓存穿透?
查询不存在的数据 → 每次打到 DB
解决:
- Bloom Filter
- 空值缓存
9. 什么是缓存击穿?
热点 key 失效
解决:
- 互斥锁
- logical expire
10. 什么是缓存雪崩?
大量 key 同时过期
解决:
- 过期时间随机化
- 多级缓存
- 限流 + 降级
四、Redis 事务 & 原子性
11. Redis 事务是强一致的吗?
不是
MULTI / EXEC 只是命令队列,不支持 rollback
12. Redis 如何保证原子性?
- 单命令原子
- Lua 脚本原子
13. 为什么 Lua 脚本快?
- 少 IO 往返
- 单线程原子执行
五、Redis 高可用(高级岗位必考)
14. Redis Sentinel 是什么?
监控 + 自动主从切换 + 通知
15. Redis 主从如何同步?
三步:
- 全量 RDB
- 增量 replication buffer
- 命令传播
16. 主从延迟会带来什么问题?
- 读到旧数据
- 丢数据
- 锁失效
17. Redis Cluster 如何分片?
CRC16(key) % 16384 → slot
六、生产事故类(区分中级和高级)
18. Redis 内存满了会发生什么?
- noeviction
- allkeys-lru
- volatile-lru
等淘汰策略
19. big key 有什么危害?
- 阻塞主线程
- 复制慢
- 过期卡顿
20. 如何发现 big key?
- redis-cli –bigkeys
- scan + strlen
21. pipeline 是什么?
批量发命令,减少 RTT
22. Redis 如何实现分布式锁?
要答:
- set nx px
- Lua 释放锁
- RedLock(争议)
七、Redis 在真实系统里的典型用途
面试官非常爱问:
| 场景 | Redis 用法 |
| 登录态 | token → user |
| 计数器 | INCR |
| 限流 | ZSET + 时间窗 |
| 排行榜 | ZSET |
| 订单超时 | key 过期 |
| 消息队列 | List / Stream |
八、面试官用来区分高手的问题
23. Redis 为什么不适合做消息队列?
要答:
- 没有 ack
- 不可重放
- 容易丢
- 无消费组
24. Redis Stream vs Kafka?
要答出:
Redis Stream 是轻量 MQ,Kafka 是日志系统
25. Redis 为什么会丢数据?
你要答出:
- AOF 未刷盘
- 主从切换
- 网络分区
- async replication
九、如果你想进中大厂,这题必会
如何用 Redis + MySQL 保证缓存一致性?
标准答案:
- 延迟双删
- binlog + MQ
- CDC 同步
如果你愿意,我可以给你:
- 一份 “Redis 面试真题(阿里 / 美团 / 腾讯)”
- 或者按你级别(初级 / 中级 / 高级)出一套模拟面试题。