Redis 八股题库
这份题库要解决的不是“Redis 为什么快”这一类单题,而是让你能把 Redis 讲成:
缓存、幂等、分布式锁、短期状态和高并发控制工具。
一、Redis 面试里你的最佳定位
你最稳的说法是:
我在项目里主要把 Redis 用在缓存、幂等、短期状态、分布式锁和热点数据处理上,很多线上问题其实不是数据库慢,而是重复请求、重复回调和并发冲突。
二、高频题
1. Redis 为什么快
标准回答
- 基于内存
- 单线程模型减少线程切换开销
- IO 多路复用
- 数据结构高效
面试更稳的说法
Redis 快不是因为“单线程”,而是因为内存访问 + 非阻塞 IO + 避免复杂上下文切换共同作用。
2. Redis 常见数据结构有哪些
必会
- string
- hash
- list
- set
- zset
你要会说使用场景
- string:缓存、计数、简单状态
- hash:对象字段存储
- list:队列
- set:去重
- zset:排行榜、延迟任务、按分数排序
3. 过期策略和淘汰策略有什么区别
标准回答
- 过期策略:键到了过期时间后怎么清理
- 淘汰策略:内存不足时淘汰哪些键
过期策略
- 定期删除
- 惰性删除
淘汰策略
- volatile-lru
- allkeys-lru
- volatile-lfu
- allkeys-lfu
- noeviction
4. 缓存穿透、击穿、雪崩分别是什么
标准回答
- 穿透:查不存在的数据,绕过缓存打到 DB
- 击穿:热点 key 过期瞬间,大量请求同时打到 DB
- 雪崩:大量 key 同时失效,导致 DB 压力激增
常见解决方案
- 穿透:布隆过滤器、空值缓存
- 击穿:互斥锁、逻辑过期、热点保护
- 雪崩:过期时间打散、多级缓存、限流降级
5. Redis 分布式锁怎么做
标准回答
通常用 SET key value NX EX ttl 实现加锁,再通过 Lua 保证“判断 value + 删除锁”原子性。
面试更稳的说法
分布式锁的重点不只是“加上了”,还包括:
- 过期时间怎么设
- 业务是否幂等
- 锁丢了怎么办
- 是否真的需要分布式锁
项目里怎么讲
像支付、收藏、订单操作这类并发敏感操作,我会结合 Redis 锁和状态机一起做,而不是只靠锁。
6. RedLock 你怎么看
标准回答
RedLock 是多节点分布式锁方案,但是否一定需要,要看业务要求和基础设施。很多业务场景下,单 Redis 锁配合幂等和状态机已经够用。
面试更稳的说法
不要把分布式锁讲成万能。对于支付、订单这类核心场景,更重要的是业务幂等和状态控制。
7. 如何用 Redis 做幂等
标准回答
常见方式:
- 请求唯一键
- 回调唯一键
- 使用
SETNX - 设置过期时间
- 配合数据库状态校验
项目里怎么讲
像支付回调、订阅回调、行为回传、重复请求,我会用 Redis 做第一层幂等控制,再结合数据库状态做最终校验。
8. zset 常见使用场景
标准回答
- 排行榜
- 按时间排序
- 延迟任务
- TopN 查询
项目里怎么讲
如果被问订单超时关闭,你可以讲:
如果没有延迟队列,也可以用 Redis ZSet 管理到期事件,到时间再批量取出处理。
9. bigkey 和 hotkey 怎么处理
标准回答
bigkey:单个 key 数据量过大hotkey:访问特别集中
处理思路
- 拆 key
- 限制单 key 大小
- 本地缓存
- 分片
- 热点数据保护
10. RDB 和 AOF 区别
标准回答
- RDB:快照式持久化,恢复快,文件小,但可能丢最近数据
- AOF:记录写命令,数据更完整,但文件更大,恢复更慢
面试更稳的说法
线上一般是按业务场景组合使用,不是非此即彼。
11. Redis 单线程是不是不能高并发
标准回答
不是。Redis 的单线程主要是执行命令这一层单线程,配合内存访问和 IO 多路复用,吞吐仍然很高。真正的问题通常不是“单线程”,而是大 key、慢命令、网络和业务模型不合理。
12. Redis 集群和哨兵你怎么理解
标准回答
- 哨兵:偏高可用和故障转移
- 集群:偏数据分片和扩容
面试更稳的说法
我不会背很多部署细节,但要理解它们解决的不是同一个问题。
三、项目里你最适合讲的 Redis 用法
1. 幂等控制
- 支付回调
- 订阅回调
- 订单操作
- 行为回传
2. 热点缓存
- 首页信息
- SEO 数据
- 收藏 / 资产部分热点数据
- 业务配置
3. 短期状态
- 用户限制次数
- 解锁状态
- 重复操作限制
4. 锁
- 收藏操作
- 订单操作
- 支付操作
四、常见追问
追问 1:Redis 能保证强一致吗
可以答:
Redis 更适合缓存、短期状态和幂等控制,不是拿来承接强事务主数据的。强一致核心还是要回到数据库和业务状态机。
追问 2:分布式锁是不是一定安全
可以答:
不是。锁只是协调手段,不能替代业务幂等和状态判断。真正稳的方案通常是锁 + 幂等 + 状态机。
追问 3:Redis 和 Etcd 怎么区别
可以答:
Redis 更适合缓存、计数、短期状态和高性能读写;Etcd 更适合配置、服务发现和分布式协调。
五、你复习 Redis 最该背的 10 个点
- Redis 为什么快
- 五大数据结构
- 过期策略
- 淘汰策略
- 缓存穿透 / 击穿 / 雪崩
- 分布式锁
- 幂等控制
- zset 场景
- bigkey / hotkey
- RDB / AOF