持久化
RDB
Redis Database
- 机制
- 在满足配置条件或手动触发时,将某一时刻的内存数据生成紧凑的二进制快照文件。
- Redis 重启时可以载入 RDB 文件恢复数据,但两次快照之间的数据可能丢失。
BGSAVE使用子进程生成快照,并利用操作系统的 Copy-on-Write;数据量较大时,fork和内存页复制仍可能造成延迟及额外内存压力。
- 数据结构


- 触发条件
- 手动触发
SAVE:执行该命令后,主线程运行rdbSave函数,服务器进程阻塞,不能处理其他请求BGSAVE(Background Save):通过fork创建子进程执行rdbSave,主线程仍可处理新请求。
- 自动触发
- 配置文件中写入
save m n,代表 m 秒内发生 n 次变化时自动执行BGSAVE
- 配置文件中写入
- 手动触发
AOF
Append Only File
- 机制
- 将会修改数据集的命令追加到日志。
- Redis 重启时重放 AOF 中的命令以恢复数据。
- Redis 7 起使用 Multi-Part AOF,由一个 Base 文件、多个 Incremental 文件和 Manifest 清单组成。
- 重写与恢复
- 文件重写策略,根据当前数据库的状态,创建一个新的AOF文件,以替代原有的冗余AOF文件
- 重写根据当前数据状态生成恢复所需的最小命令集合,而不是简单复制旧 AOF 中的冗余命令。
- Redis 恢复策略
- Redis 重写流程
- 触发条件
- 手动触发:
BGREWRITEAOF - 自动触发:配置文件中设置 appendonly yes 开启,默认策略是 Everysec
- Always:即同步写回,在每个写命令执行完成后,直接将命令落入磁盘文件(数据基本保证可靠性,但是影响Redis的性能)
- everysec:通常每秒执行一次
fsync,兼顾性能与持久性;故障时可能丢失约 1 秒、极端情况下接近 2 秒的数据 - no:仍然写 AOF,但何时将缓冲区同步到磁盘由操作系统决定,性能影响最小,数据丢失窗口不可控
- 手动触发:
同时开启 AOF 和 RDB 时,Redis 重启会优先使用数据通常更完整的 AOF 恢复。持久化不等于备份,生产环境仍需把快照复制到独立故障域并定期验证恢复流程。