# 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 不支持跨集群迁移
# 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 迁移不影响节点内存
# 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 双写不会产生冲突