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 个点

  1. Redis 为什么快
  2. 五大数据结构
  3. 过期策略
  4. 淘汰策略
  5. 缓存穿透 / 击穿 / 雪崩
  6. 分布式锁
  7. 幂等控制
  8. zset 场景
  9. bigkey / hotkey
  10. RDB / AOF