Redis 持久化机制
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 文件不会占满磁盘。
备份策略:定期将持久化文件拷贝到远程服务器。
AOF 修复:若 AOF 文件损坏,可用 redis-check-aof --fix 修复。
性能权衡:高写入负载下,AOF 可能影响吞吐量(可结合集群分摊压力)。