Redis 高可用与集群(Sentinel/Cluster)

共 40 题
#

1. Redis Cluster 的分片机制,16384 个哈希槽?

A Redis Cluster 使用 65536 个哈希槽
B key 通过 CRC16(key) % 16384 映射到槽位 ✓ 正确答案
C 槽位无法迁移
D hash tag 用于让 key 分布到不同节点
#

2. Redis Sentinel 的高可用架构,监控、通知、故障转移?

A 单个哨兵即可执行故障转移
B Sentinel 负责监控、通知与故障转移 ✓ 正确答案
C Sentinel 只监控不切换
D 故障转移无需多数派确认
#

3. 在线迁移工具,Redis-shake、redis-migrate?

A Redis-shake 只支持全量同步
B Redis-shake 支持全量 + 增量在线迁移 ✓ 正确答案
C redis-migrate 是官方推荐的新工具
D Redis-shake 不支持跨集群迁移
#

4. 多数据中心(Multi-DC)Redis 架构?

A CRDT 用于多活副本间的冲突解决 ✓ 正确答案
B 多活架构没有一致性代价
C 单主多从没有跨机房延迟
D 多活方案实现最简单
#

5. Redis Cluster 故障检测与自动 failover 的完整流程(节点间 PFAIL→FAIL 广播、cluster-node-timeout、从库发起选举并按 configEpoch/复制偏移胜出、广播新拓扑)是怎样的?

A PFAIL 是多数派确认的客观下线
B cluster-node-timeout 与故障检测无关
C 故障转移不需要广播新拓扑
D 复制偏移最大的从库更可能胜出成为新主 ✓ 正确答案
#

6. Redis Cluster Gossip 的 MEET/PING/PONG/FAIL 消息类型各自承担什么职责?随机抽节点通信的带宽开销与集群收敛时间如何权衡?

A MEET 用于广播节点下线
B PING 用于请求加入集群
C FAIL 用于广播节点已客观下线 ✓ 正确答案
D PONG 用于初次加入集群
#

7. Sentinel 的主观下线(SDOWN,单个 Sentinel 判定)与客观下线(ODOWN,quorum 个 Sentinel 同意)如何判定?failover 的领导者选举(类 Raft)与 quorum 各自防止什么问题?

A SDOWN 是 quorum 个哨兵确认的下线
B ODOWN 由单个哨兵即可判定
C 领导者选举不需要投票
D quorum 防止单点误判,领导者选举防止脑裂 ✓ 正确答案
#

8. Redis HA 的工程建议(在 Redis 数据结构与高可用范畴内)?

A 建议至少一个从库并配合 Sentinel/Cluster 自动切换 ✓ 正确答案
B 主从配置后无需 Sentinel 即可自动切换
C 持久化与高可用无关
D min-replicas-to-write 用于限制从库数量
#

9. Redis Lua 脚本的应用,EVAL、EVALSHA?

A Lua 脚本执行不是原子的
B EVALSHA 通过脚本 SHA1 摘要执行,需先 SCRIPT LOAD ✓ 正确答案
C EVAL 比 EVALSHA 更高效
D Lua 脚本不能传参数
#

10. Redis 事务(MULTI/EXEC)与 Lua 的差异?

A Lua 脚本支持条件分支且原子执行 ✓ 正确答案
B MULTI/EXEC 执行出错会整体回滚
C 事务支持条件判断
D Lua 脚本执行可能被其他命令打断
#

11. Redis 函数(FUNCTION,Redis 7+)的应用?

A 函数与 Lua 脚本完全无关
B 函数只能一次性使用
C 函数无法在故障切换后复用
D 函数通过 FUNCTION 命令族以库形式管理,支持库隔离与版本化 ✓ 正确答案
#

12. LRU 与 LFU(Redis 4.0+)的算法差异?

A LRU 基于访问频率淘汰
B LFU 基于访问频次,Redis 用带衰减的计数器实现 ✓ 正确答案
C Redis 的 LRU/LFU 都是精确算法
D LFU 无法淘汰长期热点 key
#

13. Redis 的内存淘汰策略,noeviction、allkeys-lru、volatile-lru 等?

A noeviction 会随机淘汰 key
B volatile-lru 只淘汰设置了过期时间的 key ✓ 正确答案
C allkeys-lru 只淘汰有 TTL 的 key
D noeviction 内存满后会清空所有 key
#

14. Redis 的过期策略,惰性删除 + 定期删除?

A 惰性删除 + 定期删除结合,兼顾内存与 CPU ✓ 正确答案
B Redis 只用惰性删除
C 定期删除会阻塞所有命令
D 过期 key 一定会被立即删除
#

15. Cluster 的数据迁移,reshard、rebalance?

A reshard 是自动平衡所有节点槽位
B rebalance 是手动迁移单个槽位
C 迁移期间访问被迁移 key 可能收到 ASK 重定向 ✓ 正确答案
D 迁移期间集群不可用
#

16. Cluster 的节点通信,Gossip 协议?

A 需要中心节点协调通信
B 节点随机交换状态信息使集群状态收敛 ✓ 正确答案
C Gossip 收敛是即时同步的
D Gossip 无法进行故障检测
#

17. Redis Cluster 的从节点读写,默认不服务读请求,READONLY 命令开启后的数据一致性风险与适用场景?

A 从节点默认直接服务读请求
B READONLY 不影响一致性
C READONLY 开启后从库可读,但可能读到旧数据 ✓ 正确答案
D 从节点读永远返回最新数据
#

18. Redis Cluster 的槽位倾斜与热点治理,hash tag、手动迁移槽位、多 key 操作的 slot 限制?

A hash tag 不会造成热点
B 多 key 操作可以跨槽执行
C 槽位无法手动迁移
D hash tag 让相关 key 落在同一槽位 ✓ 正确答案
#

19. Redis Cluster 在线扩缩容,新增节点、reshard、槽位迁移、下线节点的完整流程与客户端影响?

A 期间客户端可能收到 MOVED/ASK 重定向 ✓ 正确答案
B 扩缩容会导致集群整体不可用
C 新节点加入后无需迁移槽位
D 下线节点无需迁移槽位
#

20. Redis 主从全量同步的代价,RDB 生成与传输对主从节点的影响,diskless replication(无盘复制)的取舍?

A 主库 fork 生成 RDB 不需要额外内存
B full sync 只发生在首次连接
C 从库加载 RDB 不阻塞命令
D diskless replication 直接把 RDB 数据流式发送给从库,减少磁盘 IO ✓ 正确答案
#

21. 复制积压缓冲区(repl-backlog-size)与 PSYNC 断线续传,如何避免频繁全量重同步?

A 断线偏移仍在积压缓冲区内时可增量续传,避免全量同步 ✓ 正确答案
B repl-backlog 保存从库的读请求
C PSYNC 不支持增量同步
D 积压缓冲区越大越费 CPU
#

22. 缓存雪崩的工程治理全景,过期时间随机化、多级缓存、限流降级与热点数据不设置过期?

A 过期时间随机化会让大量 key 同时过期
B 热点数据不设过期可避免其同时失效导致的雪崩 ✓ 正确答案
C 雪崩无法通过多级缓存缓解
D 限流只针对缓存集群
#

23. Redis Cluster 与 Redis Sentinel 的选型边界,数据量、QPS、多 key 事务与运维复杂度如何权衡?

A Cluster 适合小数据量场景
B Sentinel 无槽位限制,支持跨 key 事务,Cluster 有限制 ✓ 正确答案
C Cluster 运维比 Sentinel 简单
D Sentinel 支持水平扩展
#

24. Cluster 的 ASK 与 MOVED 重定向?

A ASK 是迁移中的临时重定向,不更新路由表 ✓ 正确答案
B MOVED 用于槽位迁移中的临时引导
C MOVED 只影响本次请求
D 两者都会更新客户端路由表
#

25. Sentinel vs Cluster 的取舍,HA vs 水平扩展?

A Sentinel 提供水平扩展能力
B Cluster 提供分片水平扩展并内置 HA ✓ 正确答案
C Cluster 数据只能存单机
D Sentinel 内置分片机制
#

26. Codis(豌豆荚)与 Cluster 的对比?

A Codis 使用去中心化架构
B Codis 通过 Proxy 分片并依赖 ZooKeeper 管理元数据 ✓ 正确答案
C Cluster 通过 Proxy 路由请求
D Codis 客户端需处理重定向
#

27. 大 Key(Bigkey)的检测与拆分?

A --bigkeys 会阻塞主线程
B MEMORY USAGE 无法测量大 Key
C 大 Key 只能删除无法拆分
D 大 Hash 可按时间或业务分片成多个小 key ✓ 正确答案
#

28. Redis Cluster 的在线迁移,如何用 redis-cli --cluster reshard 或 Redis-shake 平滑迁移槽位与数据,迁移期间对读写与内存的影响如何控制?

A 迁移期间源节点 key 不可读
B 迁移需预留目标节点内存空间,宜低峰执行 ✓ 正确答案
C Redis-shake 只做增量同步
D 迁移不影响节点内存
#

29. Redis HA 与一致性?

A 异步复制下故障切换可能丢失最新写入 ✓ 正确答案
B 主从切换保证不丢写入
C WAIT 命令可提升一致性
D Redis 提供强一致性保障
#

30. Redis Cluster 的一致性模型,为什么主从复制是异步的、故障切换可能丢失写入,业务上如何通过 WAIT 命令或应用层补偿缓解?

A 主从复制是同步的
B WAIT 命令可等待写入复制到指定从库,降低丢写风险 ✓ 正确答案
C 故障切换保证不丢任何写入
D 异步复制没有延迟
#

31. Lua 脚本的原子性,单线程执行?

A Lua 脚本通过加锁保证原子性
B 单线程模型下脚本执行期间不被打断,天然原子 ✓ 正确答案
C 长脚本不会阻塞主线程
D Lua 脚本内可执行阻塞命令
#

32. EVAL 与 EVALSHA 的脚本缓存机制(SCRIPT LOAD/SCRIPT FLUSH)与集群模式下的差异?

A SCRIPT FLUSH 用于缓存脚本
B EVALSHA 每次都要传脚本内容
C 脚本缓存在重启后仍保留
D 集群模式下脚本内 key 必须落在同一槽位 ✓ 正确答案
#

33. Redis 7 的 FUNCTION 与 Lua 脚本在部署、管理与库隔离上的差异?

A FUNCTION 无法复用
B Lua 脚本缓存在节点重启后仍保留
C FUNCTION 以库为单位管理并支持库隔离 ✓ 正确答案
D 两者部署方式完全相同
#

34. Redis Lua 与一致性?

A Lua 脚本可跨节点保证事务
B Lua 脚本执行期间可被其他命令打断
C Lua 脚本的原子性限定在单节点内 ✓ 正确答案
D Lua 脚本支持跨槽位操作
#

35. Redis Cluster 的槽位迁移、reshard 与客户端重定向的成本如何评估?

A MIGRATE 是异步命令不会阻塞
B 迁移期间目标节点内存不增加
C 迁移成本包括数据复制、内存增加与客户端重定向 ✓ 正确答案
D ASK 重定向不会增加 RTT
#

36. 哨兵与 Cluster 的选型边界,读写分离在 Cluster 下的实现?

A Cluster 下从库默认服务读请求
B 读写分离适用于强一致场景
C Sentinel 支持水平扩展
D Cluster 下读写分离需使用 READONLY,且可能读到旧数据 ✓ 正确答案
#

37. Redis 跨机房/多活的同步方案,Redis Enterprise CRDT、自研双向同步与双写冲突解决(LWW)的取舍?

A LWW 冲突解决不会丢数据
B CRDT 能自动解决多活冲突 ✓ 正确答案
C 自研双向同步实现最简单
D Redis Enterprise 不支持多活
#

38. maxmemory 配置与内存回收?

A 达到 maxmemory 后按淘汰策略回收内存 ✓ 正确答案
B maxmemory 达到后必然抛错
C maxmemory 与内存碎片无关
D maxmemory 无法配置
#

39. Redis 大 Key 的检测手段,redis-cli --bigkeys、MEMORY USAGE 与 SCAN 采样的精度和代价差异?检测后如何拆分或压缩大 Key?

A MEMORY USAGE 可精确测量单个 key 内存 ✓ 正确答案
B --bigkeys 精确测量每个 key 内存
C SCAN 采样精度最高
D --bigkeys 会阻塞所有命令
#

40. Redis 多活/跨机房方案(CRDT 与双写)的一致性代价?

A 多活是最终一致,跨机房读写可能读到旧数据 ✓ 正确答案
B 多活保证强一致
C CRDT 能保证线性一致
D 双写不会产生冲突