Redis 持久化机制

38

Redis 持久化是将内存中的数据保存到磁盘,确保数据在重启后不丢失的关键机制。Redis 提供了两种主要的持久化方式:RDB(Redis Database) 和 AOF(Append-Only File),以及两者的混合模式。

RDB(快照持久化)

RDB 通过生成某个时间点的数据快照(snapshot)保存到磁盘(默认文件名为 dump.rdb)

触发方式:

手动触发:执行 SAVE(阻塞主线程)或 BGSAVE(后台异步生成快照)。

自动触发:根据配置规则触发 BGSAVE

save 900 1     # 900秒内至少1次修改
save 300 10    # 300秒内至少10次修改
save 60 10000  # 60秒内至少10000次修改

优点:

文件紧凑,适合备份和灾难恢复。

恢复大数据集时速度比 AOF 快。

最大化 Redis 性能(后台子进程处理)。

缺点:

可能丢失最后一次快照后的数据(取决于触发间隔)。

大数据量时 BGSAVE 可能占用较多内存(fork 子进程)。

AOF(追加日志持久化)

AOF 记录所有写操作命令(如 SET, DEL),以追加方式写入文件(默认 appendonly.aof)。重启时通过重放命令恢复数据。

配置选项

appendonly yes              # 启用 AOF
appendfsync always          # 每次写操作都同步(安全,性能差)
appendfsync everysec        # 每秒同步一次(默认,平衡安全与性能)
appendfsync no              # 由操作系统决定同步时机(性能最好,风险最高)

AOF 重写:

为避免日志文件过大,Redis 会定期重写 AOF(BGREWRITEAOF),移除冗余命令,生成紧凑的新 AOF。

优点:

数据安全性更高(可配置为最多丢失1秒数据)。

可读性强(文本格式记录操作)。

缺点:

文件通常比 RDB 大。

恢复速度较慢(尤其是大数据量时)。

混合持久化

结合 RDB 和 AOF,生成 AOF 文件时,前半部分为 RDB 格式的快照,后半部分记录快照后的增量操作。

aof-use-rdb-preamble yes    # 启用混合模式

优点:

恢复速度快(优先加载 RDB 部分)。

数据丢失风险低(后续增量操作通过 AOF 保证)。

数据恢复优先级

如果启用 AOF,优先加载 appendonly.aof。

若未启用 AOF,则加载 dump.rdb。

选择策略

场景

推荐方式

允许分钟级数据丢失

RDB

需要更高数据安全性

AOF(appendfsync everysec)

平衡恢复速度与安全性

混合持久化(Redis 4.0+)

灾难恢复

RDB + 定期备份 AOF

注意事项

监控磁盘空间:确保 RDB/AOF 文件不会占满磁盘。

备份策略:定期将持久化文件拷贝到远程服务器。

AOF 修复:若 AOF 文件损坏,可用 redis-check-aof --fix 修复。

性能权衡:高写入负载下,AOF 可能影响吞吐量(可结合集群分摊压力)。