加载中...
Redis 提供两种持久化机制:RDB(Redis Database Backup,快照)和 AOF(Append Only File,追加日志),两者各有侧重,生产环境通常同时开启以兼顾恢复速度和数据完整性。
| 持久化类型 | RDB(快照)+ AOF(追加日志) |
| 推荐策略 | 同时开启 RDB 和 AOF |
| AOF fsync 推荐 | everysec(每秒刷盘) |
RDB 是 Redis 默认的持久化方式:按配置的时间间隔(如「300秒内有100次写入则保存」),将内存中的数据集以二进制快照形式写入单个 .rdb 文件。写入时 Redis 通过 fork() 创建子进程,子进程负责将数据写盘,父进程继续处理请求,利用操作系统的写时复制(CoW)机制避免大规模内存拷贝。
RDB 的优势:恢复速度快(直接加载二进制文件),文件紧凑适合备份,对 Redis 运行时性能影响小。缺点:最后一次快照后的数据在崩溃时会丢失,丢失窗口可能长达几分钟。[1]
AOF 将每条写命令以文本形式追加到日志文件,服务器重启时通过回放日志重建数据集。AOF 提供三种 fsync 策略:always(每条命令都刷盘,最安全但最慢)、everysec(每秒刷盘,最多丢1秒数据,推荐)、no(让操作系统决定,性能最好但丢失数据量不可控)。
AOF 文件随时间增长,Redis 通过 AOF rewrite 机制压缩日志:创建子进程,遍历当前内存状态生成最小化的命令集写入新文件,替换旧文件,删除那些已经被覆盖的历史命令。Redis 7.0 引入了 Multi-Part AOF,将 AOF 拆分为多个文件管理,解决了重写期间父子进程数据同步的历史难题。
| 持久化类型 | RDB(快照)+ AOF(追加日志) |
| 推荐策略 | 同时开启 RDB 和 AOF |
| AOF fsync 推荐 | everysec(每秒刷盘) |
登录 后参与讨论
暂无讨论,来发表第一条评论吧