Redis持久化RDB与AOF两种模式对比选型

Redis 的 RDB 和 AOF 是两种不同的持久化机制,RDB 按时间点生成数据快照,AOF 记录每次写命令。
选型时核心看你能接受多少数据丢失,以及更在意恢复速度还是写入性能。
下面从配置到验证一步步说明,零基础也能跟着做。

先搞清 RDB 和 AOF 到底存了什么

RDB 是把某一刻内存里的所有数据压缩成一个二进制文件,默认叫 dump.rdb
它的特点是文件小、恢复快,适合做备份和灾难恢复。
缺点是两次快照之间如果 Redis 挂了,这段时间的写入会丢。

AOF 是把每条写命令追加到日志文件末尾,默认叫 appendonly.aof
Redis 重启时会重新执行这些命令来恢复数据。
它的数据安全性更高,但文件通常比 RDB 大,恢复速度也慢一些。

判断条件:如果业务能容忍几分钟数据丢失,优先用 RDB;
如果几乎不能丢数据,选 AOF 或两者混合。

动手配置:RDB 和 AOF 分别怎么开

假设你已经装好 Redis,配置文件通常位于 /etc/redis/redis.conf/usr/local/redis/redis.conf,下面以这个路径为例。

RDB 配置

RDB 默认就是开启的,检查这几行:

save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir /var/lib/redis

含义是:
900 秒内至少 1 个 key 变化、
300 秒内至少 10 个 key 变化、
60 秒内至少 10000 个 key 变化时,
自动触发快照。dir 是文件保存目录,
确保 Redis 有写权限。

如果不想自动触发,可以注释掉所有 save 行,但这样只能手动执行 BGSAVE

AOF 配置

AOF 默认关闭,需要手动打开:

appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec

appendfsync 有三个可选值:always 每条命令都刷盘,最安全但最慢;everysec 每秒刷一次,兼顾安全和性能;no 交给操作系统决定,最快但可能丢较多数据。
生产环境建议先用 everysec

改完配置后重启 Redis:

sudo systemctl restart redis

或者用 redis-cli shutdown 再启动。

两种模式同时用可以吗?混合持久化怎么选

从 Redis 4.0 开始支持混合持久化,即 AOF 重写时把当前数据以 RDB 格式写入 AOF 文件开头,后续命令再以 AOF 格式追加。
这样重启时先加载 RDB 部分,再重放少量 AOF 命令,恢复速度更快。

开启方式:

aof-use-rdb-preamble yes

结论:大多数生产环境推荐开启 AOF 并配合 everysec,同时保留 RDB 做冷备。
这样既控制数据丢失窗口,又有快照文件可用于迁移和备份。

避坑指南:这些地方容易出问题

  • 磁盘空间不足:AOF 文件会持续增长,dir 所在分区要留足空间。建议监控磁盘使用率,并设置 auto-aof-rewrite-percentageauto-aof-rewrite-min-size 触发重写。
  • 权限错误:RDB 和 AOF 文件所在目录必须对 Redis 运行用户可写。如果启动报 Permission denied,检查 dir 目录属主。
  • AOF 文件损坏:异常断电可能导致 AOF 尾部不完整。可以用 redis-check-aof --fix appendonly.aof 修复,但修复前先备份原文件。
  • appendfsync always 拖慢性能:除非对数据安全要求极高且写入量很小,否则不要长期用 always
  • 同时关闭 RDB 和 AOF:这样重启后数据全丢,只适合纯缓存场景。

验证是否生效:三条命令确认

改完配置并重启后,用 redis-cli 连接,执行:

redis-cli info persistence

关注输出中的 rdb_last_bgsave_status:okaof_last_bgrewrite_status:ok,表示最近一次持久化操作成功。

再手动触发一次保存:

redis-cli bgsave
redis-cli bgrewriteaof

然后到 dir 目录下查看文件是否更新:

ls -lh /var/lib/redis/

应该能看到 dump.rdbappendonly.aof 的时间戳是刚刚。

最后做一次恢复测试:往 Redis 写一个 key,重启服务,再读这个 key,能读到说明持久化配置正确。

常见疑问

RDB 和 AOF 可以同时开启吗?
可以,而且推荐生产环境这样做。Redis 重启时优先用 AOF 恢复,因为 AOF 通常更完整。

AOF 文件越来越大怎么办?
Redis 会自动重写,也可以手动执行 BGREWRITEAOF。重写会生成一个更紧凑的新文件,替换旧文件。

选 RDB 还是 AOF?
如果数据可以容忍几分钟丢失,选 RDB 更省资源;如果数据很重要,选 AOF 并设 everysec;如果既要安全又要快速恢复,开混合持久化。

改了配置没生效?
确认改的是 Redis 实际加载的配置文件,可以用 redis-cli config get appendonly 查看当前运行值。如果和配置文件不一致,说明改错了文件或没重启。

选型没有绝对答案,先明确你的数据丢失容忍度和性能要求,再按上面的步骤配置并验证。
建议在测试环境先演练一次恢复流程,确认无误后再上生产。

分享到:
上一篇
MySQL数据库导入导出大文件,source命令实操
下一篇
Redis密码设置,禁止外网无密码访问
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意