Redis Cluster 的 cluster-node-timeout 与 cluster-require-full-coverage 在分区期间如何影响可用性?
围绕“Redis Cluster 的 cluster-node-timeout 与 cluster-require-ful”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出超时决定多久判下线并触发切换、require-full-coverage 为 yes 时有槽无主管则整集群拒写,分别权衡切换灵敏。
程序员面试题库第 76 页,收录第 3751–3800 题,共 5000 道完整解析,覆盖前端、JavaScript、React、Vue、Node.js、AI Agent、网络、数据库与系统设计。
按稳定语义路径排序
围绕“Redis Cluster 的 cluster-node-timeout 与 cluster-require-ful”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出超时决定多久判下线并触发切换、require-full-coverage 为 yes 时有槽无主管则整集群拒写,分别权衡切换灵敏。
围绕“Redis 分布式锁如何实现可重入与阻塞等待,为什么原生 SET NX 不具备这两种能力”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出可重入需哈希记录线程标识与计数、阻塞等待可用订阅或自旋。
围绕“Redis 分布式锁的超时时间如何设定,业务执行时间超过锁 TTL 会发生什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 TTL 过短导致锁提前释放引发并发冲突、过长导致故障恢复慢的权衡,以及看门狗续期思路。
围绕“Redis 分布式锁释放时为什么要校验唯一 token 并用 Lua 脚本删除,而不是直接 DEL”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出锁超时后被其他客户端重取时直接 DEL 会误删他人锁,需要 GET 比较加 DEL 的原子脚本。
围绕“如何发现 Redis 中的热点键,monitor、hotkeys 参数与代理层统计各有什么代价”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 MONITOR 全量抓包性能开销大、OBJECT FREQ 与 --hotkeys 依赖 LFU maxmemory-poli。
围绕“定位到 Redis 热点键后,本地缓存、键拆分和只读副本分流三种治理手段分别适用于什么读写特征”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出读多写少用本地缓存或副本、写热点用拆键分散再聚合、以及拆键对原子操作的破坏。
围绕“Redis Cluster 中为什么热点键无法通过增加节点解决,单键流量的上限由什么决定”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出单键固定落在单个槽、集群扩容只迁移槽不能拆分单键,单键 QPS 上限取决于单个主节点与网络。
围绕“Redis 键空间通知如何订阅过期事件,为什么不能用过期事件做精确的定时任务”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 notify-keyspace-events 配置与 __keyevent@__:expired 频道用法,以及惰性加定期删除。
围绕“本地缓存加 Redis 组成多级缓存时,实例间的本地缓存如何感知失效”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出通过发布订阅或键空间通知广播失效消息使各节点清除本地副本,以及短暂不一致窗口。
围绕“Redis 执行 Lua 脚本的原子性边界是什么,脚本长时间运行或中途出错会发生什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出脚本执行期间不被其他命令穿插但出错时已执行的写不回滚,长脚本阻塞整个实例且 SCRIPT KILL 仅在无写时有效。
围绕“Redis 内存达到 maxmemory 后八种淘汰策略如何分类,纯缓存与带持久数据的业务应分别选哪类”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 volatile-* 只淘汰设过期的键、allkeys-* 全体键中淘汰、noeviction 拒写三类的差异,纯缓存可用 a。
围绕“什么场景下可以完全关闭 Redis 持久化,关闭后副本节点还需要注意什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出可容忍全量丢失的纯缓存场景,以及副本默认重启后从主节点全量同步可能把空数据扩散的问题。
围绕“Redis pipeline 与 MULTI 事务的区别是什么,pipeline 批量命令原子吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 pipeline 只是批量发送减少 RTT、命令间可被其他客户端穿插,MULTI/EXEC 保证队列内命令顺序执行但不支持回滚。
围绕“Redis Pub/Sub 与 Streams 做消息分发的可靠性差异是什么,什么场景必须选 Streams”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 Pub/Sub 即发即弃、订阅者离线消息丢失,Streams 持久化存储加消费组可确认重投,需要离线消费与至少一次语义时必须选。
围绕“Redis Cell 模块的 CL.THROTTLE 命令实现了哪种限流算法,它的参数分别控制什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出通用信元速率算法(GCRA/漏桶)的语义及突发容量、速率、周期参数含义,不与其他限流实现做横向评测。
围绕“在集群或多副本 Redis 上做分布式限流,为什么计数必须落在同一个键上,读改写并发下如何保证准确”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出限流状态需单键存储以利用单节点原子性、集群下同一会话哈希到同槽,以及 Lua 或 INCR 避免并发读改写丢失。
围绕“如何用 Redis INCR 加 EXPIRE 实现固定窗口限流,窗口边界突增问题是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出计数器加过期时间的实现及窗口切换瞬间两倍流量的边界突增缺陷。
围绕“如何用 Redis 有序集合实现滑动窗口限流,每次请求需要做哪些 ZSET 操作”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出以时间戳为 score 记录请求、先清理窗口外成员再计数判断的流程及其内存开销。
围绕“用 Redis 实现令牌桶限流时,为什么需要用 Lua 脚本在服务端完成令牌计算”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出按时间差惰性补充令牌的算法,以及读取状态、计算、写回三步必须在服务端原子执行的原因。
围绕“Redis RDB 持久化的触发方式有哪些,bgsave fork 子进程时写时复制带来什么风险”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 save 配置触发与手动 SAVE/BGSAVE 的区别,以及 fork 期间 COW 导致内存翻倍的隐患。
围绕“Redis 同时开启 RDB 和 AOF 时重启优先加载哪个,混合持久化结合了两者的什么优点”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 AOF 数据更完整所以优先加载,混合持久化以 RDB 头加 AOF 增量兼顾恢复速度与数据安全。
围绕“用 Redis 副本分担读流量时,复制延迟会导致哪些可见性问题,读写一致性要求高的请求应怎么路由”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出副本滞后被动过期键仍可读、读到旧值的现象,强一致读强制走主节点或按 key 粘性路由。
围绕“Read Through、Write Through 与 Write Behind 三种缓存模式的职责划分和一致性差”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出三者中缓存层与数据库的读写责任归属,以及 Write Behind 异步落库带来性能提升与丢数据风险。
围绕“Redis 官方提出的 Redlock 算法如何在多个独立实例上加锁,它解决单实例主从切换下的什么问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出主从异步复制下故障转移可能丢锁,Redlock 用多数派加锁缓解,不深入 Martin Kleppmann 的争议细节。
围绕“Redis 副本如何处理已过期的键,为什么副本不主动删除过期键而由主节点传播 DEL”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出过期删除由主节点触发并传播 DEL 到副本以保证主从一致,副本读过期键逻辑上不可见但不物理删除。
围绕“Redis 主从复制为什么是异步的,主节点写入成功未同步到副本就宕机会怎样,WAIT 命令能缓解什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出异步复制下故障切换丢失未传播写,WAIT 阻塞等待指定副本数确认以提高持久性但不保证强一致。
围绕“Redis 主从复制的全量同步与部分重同步分别在什么条件下发生,repl-backlog 起什么作用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出首次连接或 offset 不在积压缓冲时走全量 RDB 传输,断线重连且 offset 覆盖时走增量命令,backlog 大小决。
围绕“Redis Sentinel 判定主观下线与客观下线的区别是什么,故障转移时如何选择新主”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出单哨兵超时为主观、多数派确认才客观下线,选主按复制偏移量、优先级、runid 过滤排序。
围绕“Redis 主从架构网络分区时为什么会出现脑裂双主,min-replicas 配置如何降低丢数据窗口”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出旧主被分区后仍接受写、恢复后变副本导致数据被覆盖,min-replicas-to-write 与 max-lag 让旧主失联时拒。
围绕“Redis Streams 消费组中消息被 XREADGROUP 读取后未确认会怎样,XACK 与 XPENDING”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出未确认消息进入 PEL 待处理列表,通过 XPENDING 查看、XCLAIM 把超时消息转移给其他消费者重试。
围绕“成功响应什么时候用 204 No Content 而不是 200,DELETE 成功该用哪个”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须基于响应体有无语义内容做判断。
围绕“创建资源成功后返回 201 时响应体和 Location 头应该怎么设计”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 Location 指向新资源 URI 及是否回传完整资源的取舍。
围绕“耗时操作无法同步完成时,202 Accepted 加状态轮询的接口怎么设计”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出任务资源建模与完成转向 303 或结果 URI 的方案。
围绕“参数校验失败应该返回 400 还是 422,错误信息里该不该暴露字段级细节”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分语法错误与语义校验失败并给出字段级错误的边界。
围绕“401、403、404 在鉴权场景中怎么区分,为什么有时故意对无权限资源返回 404”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须讲清未认证、无权限、隐藏资源存在性三种语义。
围绕“资源被永久删除后返回 404 还是 410,语义和实际用途差在哪”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 410 表达主动永久移除及对爬虫与缓存的意义。
围绕“哪些场景该用 409 Conflict,它与 412、422 的边界是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须列举唯一约束、状态机冲突等场景并区分前提条件失败。
围绕“限流时返回 429 与 Retry-After 的正确用法是什么,客户端重试该遵守什么规则”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明响应头取值形式与客户端退避配合。
围绕“当操作无法映射为资源 CRUD 时(如重置密码、发布文章),REST 接口该怎么设计”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出动作资源化或受控动词端点两种方案及取舍。
围绕“REST API 哪些变更属于向后兼容、哪些必须升主版本”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须能分类枚举新增字段、删除字段、改类型、改默认值等情形的兼容性。
围绕“批量创建接口该保证全成功或全回滚,还是允许部分成功,决策依据是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答要按业务一致性与客户端补偿成本给出取舍标准。
围绕“批量操作接口部分成功部分失败时,状态码和响应体该怎么设计”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出整体 200/207 与逐项结果的方案及语义权衡。
围绕“批量提交中客户端重试时,如何保证已成功的子项不被重复执行”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明子项级幂等键或客户端请求 ID 的去重设计。
围绕“批量接口该限制单批数量吗,大批量请求的超时和内存问题怎么控制”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出上限设定、异步化与分片策略。
围绕“REST GET 响应如何利用 Cache-Control 与 ETag 降低服务端压力,写操作后缓存怎么失效”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖完整回答要覆盖可缓存性判定与失效联动。
围绕“当过滤条件复杂到查询参数无法表达时,用 POST /search 创建查询资源是否违背 REST”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须权衡 URL 长度、缓存能力与语义纯度给出方案。
围绕“HTTP 内容协商中 Accept 与 Content-Type 各管什么,版本信息放进媒体类型有什么利弊”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分请求协商与实体描述两个方向。
围绕“游标分页(cursor-based)怎么设计,为什么适合无限滚动和实时数据流”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明游标编码、排序键稳定性与不支持跳页的代价。
围绕“REST 错误响应体应该包含哪些字段,为什么推荐 RFC 9457 problem+json 格式”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 type/title/status/detail/instance 字段职责。
围绕“ETag 和 Last-Modified 做条件请求时各有什么局限,什么时候必须选 ETag”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须指出秒级精度与弱校验的局限。