Redis AOF 的 appendfsync 三种策略在数据安全与性能上如何取舍?
围绕“Redis AOF 的 appendfsync 三种策略在数据安全与性能上如何取舍”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 always、everysec、no 三档分别最多丢 0、1 秒、由操作系统决定的数据量及对应 IO 开销。
Redis · 分布式使用面试题第 1 页,显示第 1–44 题,共找到 44 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
围绕“Redis AOF 的 appendfsync 三种策略在数据安全与性能上如何取舍”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 always、everysec、no 三档分别最多丢 0、1 秒、由操作系统决定的数据量及对应 IO 开销。
围绕“Redis AOF 重写为什么能压缩文件体积,重写期间新命令如何保证不丢失”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出按当前内存数据生成最小命令集而非压缩旧日志,以及重写期间新写命令同时进旧 AOF 与重写缓冲区的双写机制。
围绕“Redis 的 LRU 和 LFU 为什么不是精确算法,maxmemory-samples 调大调小各有什么影响”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出基于随机采样加空闲时间/访问频率计数避免全量链表维护的开销,采样数大更准但耗 CPU 与内存。
围绕“Redis 大 key 会造成哪些问题,排查到之后如何按数据类型拆分”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出网络阻塞、删除阻塞(可 UNLINK 异步删)、内存倾斜,以及哈希/集合按字段或业务维度拆成多键的思路。
围绕“Cache Aside(旁路缓存)模式的读写流程是什么,为什么是更新数据库后删缓存而不是先删缓存再更新”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出读 miss 回填、写时先写库再失效缓存的标准流程,以及先删缓存会被并发读回填旧值的问题。
围绕“Redis 缓存雪崩的两种成因是什么,过期时间加随机抖动和多级缓存分别对应哪种”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分大量 key 同时过期与 Redis 实例宕机两种成因,并分别对应随机 TTL 和高可用/多级缓存/降级。
围绕“Redis 缓存击穿(单个热点键过期被并发重建)有哪些防护手段,互斥锁与逻辑过期怎么选”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出热点键失效瞬间大量请求同时回源的现象,互斥重建保证一致性但阻塞、逻辑过期返回旧值异步刷新保证可用性的取舍。
围绕“缓存与数据库双写不一致时,延迟双删和订阅 binlog 失效缓存各自解决什么问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出延迟双删针对读写并发窗口的旧值回填、binlog 订阅把失效逻辑与业务解耦,不承诺强一致、不展开分布式事务。
围绕“Redis 缓存穿透如何发生,缓存空值和布隆过滤器两种方案各自适合什么场景”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出查询不存在数据导致每次都打到数据库的机制,以及短 TTL 空值适合重复单 key、布隆过滤器适合海量不重复 key 的取舍。
围绕“Redis Cluster 不依赖哨兵如何完成故障检测与新主选举,为什么要求集群节点数为奇数个主”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出节点间 gossip 交换 PFAIL/FAIL 状态、多数主节点确认下线后由副本发起选举并赢得多数票,奇数主降低平票与分区容忍。
围绕“Redis Cluster 为什么用 16384 个哈希槽而不是一致性哈希,key 到节点的映射如何计算”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 CRC16 取模 16384 定位槽、槽作为迁移与映射的最小单位使扩缩容只需迁移槽,以及 16384 数量在心跳开销与迁移粒度。
围绕“Redis Cluster 客户端收到 MOVED 与 ASK 错误的处理逻辑有什么不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 MOVED 表示槽已永久归属新节点需更新本地槽表、ASK 仅本次请求带 ASKING 去目标节点执行且不更新路由。
围绕“Redis Cluster 中为什么 MGET、事务和 Lua 脚本默认不能跨槽操作,hash tag 如何强制多个”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出多键命令要求所有键同槽以保证单节点原子执行,用 {tag} 让花括号内子串参与哈希计算使键同槽及其带来的数据倾斜风险。
围绕“Redis Cluster 扩容新节点时槽位如何在线迁移,迁移期间客户端的 ASK 重定向是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 MIGRATE 逐 key 搬迁与 CLUSTER SETSLOT 状态切换,迁移中键被拆到两节点时用 ASK 临时重定向区别。
围绕“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 把超时消息转移给其他消费者重试。