会,但影响程度取决于appendfsync配置和写负载强度;默认everysec策略性能损耗可控,崩溃最多丢1秒数据,吞吐维持58k+ req/s。

会,但影响程度取决于 appendfsync 配置和写负载强度。默认的 everysec 策略在大多数场景下性能损耗可控(通常 always 会让吞吐量暴跌至几百 TPS。
为什么 AOF 写入会影响 Redis 性能
AOF 不是“无感”追加——它本质是同步或准同步的磁盘 I/O 操作,主线程必须等待 fsync 完成(always)或至少把命令写入内核缓冲区(everysec)。高并发写入时,I/O 延迟会直接拖慢命令响应。
-
appendfsync always:每次写都调用fsync(),强一致性但极慢,不适用于生产环境 -
appendfsync everysec:命令先写入内核缓冲区,主线程几乎不阻塞;后台线程每秒调用一次fsync(),平衡性最好 -
appendfsync no:只依赖操作系统刷盘(Linux 通常 30 秒一次),性能最高但宕机可能丢失数秒数据
AOF 重写(bgrewriteaof)期间的性能抖动
重写不是“复制粘贴”,而是由子进程遍历当前内存数据生成新 AOF 文件。这个过程本身不卡主线程,但 fork() 调用会触发 copy-on-write 页表分配,瞬间占用 CPU 和内存带宽。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- Redis 实例内存越大,
fork()卡顿越明显(GB 级实例常见毫秒级停顿,百 GB 级可能达秒级) - 重写期间若发生大量写操作,子进程需复制被修改的内存页,加剧内存压力
- 自动重写触发条件(
auto-aof-rewrite-percentage和auto-aof-rewrite-min-size)设得过激,会导致频繁重写
Master 节点要不要开 AOF
不要。Master 的核心职责是低延迟响应客户端请求,AOF 日志写入和重写都会引入不可控延迟。
- 禁用 Master 的 AOF:
appendonly no,同时关闭 RDB:save "" - 让一个或多个 Slave 承担持久化任务:Slave 开启
appendonly yes+appendfsync everysec - 注意:Slave 开启 AOF 后,主从切换时它会成为新 Master,此时需确保其配置可安全降级为 Master(比如保留 RDB 备份)
真正容易被忽略的是 fork() 成本——它不看数据量大小,而看虚拟内存页数量。即使你只存了几 MB 数据,但 key 数量极多(比如百万级小 key),fork() 依然可能卡顿。监控 latest_fork_usec 指标比单纯看内存使用率更有效。










