跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

Redis RDB和AOF有什么区别_根据业务场景选择合适的持久化策略

RDB会丢数据是因为它基于定时快照,两次快照间宕机则新写入数据丢失;AOF看似更安全但若配置不当(如未启用重写、fsync策略不合理或文件损坏),反而导致恢复慢、磁盘满甚至启动失败。 Redis 默认只开 RDB,但光靠它扛不住数据强一致性要求;AOF 能补上这个缺口,但不是无脑开就完事——选错配置或混搭不当,反而拖慢性能、增大恢复时间。 为什么 RDB 会丢数据,而 AOF 看似“更安全”却不一定可靠 RDB 是定时快照,比如配置
save 60 10000
,意味着“60 秒内有 1 万次写才触发一次
BGSAVE
”。这期间若进程被 kill -9 或机器断电,所有新写入都没进
dump.rdb
,直接丢失。AOF 默认是
appendfsync everysec
,每秒刷一次盘,最坏丢 1 秒数据;设成
always
理论上不丢,但每次写都要
fsync()
,QPS 高时延迟飙升,还可能卡住主线程。 更关键的是:AOF 文件本身会膨胀。比如一个
INCR
键执行了 10 万次,AOF 就记 10 万条命令;但实际值只是最终数字。不开启
auto-aof-rewrite-percentage
和
auto-aof-rewrite-min-size
,文件越滚越大,重启加载就变慢。 什么时候该关掉 RDB,只用 AOF 仅当满足以下全部条件时,才建议禁用 RDB(
save ""
)并纯用 AOF: 业务能接受
everysec
模式下最多 1 秒数据丢失 写流量稳定,没有突发批量写入(否则 AOF rewrite 可能抢 CPU,影响响应) 磁盘 I/O 足够快,且
appendonly.aof
所在分区不与其他高 IO 服务共用 已配好
auto-aof-rewrite-percentage 100
和
auto-aof-rewrite-min-size 64mb
,并监控
redis-cli info persistence | grep aof_rewrite
确保重写正常触发 别信“AOF 更安全所以必须开”——很多线上事故源于 AOF 重写失败后持续追加、磁盘写满、Redis 进程 OOM 被杀,反而比 RDB 丢得更多。 为什么混合使用 RDB + AOF 反而是主流选择 Redis 4.0+ 支持混合持久化(
aof-use-rdb-preamble yes
),启动时先加载 RDB 快照,再重放 AOF 尾部增量命令。这既保留 RDB 加载快的优点,又避免 AOF 全量重放的慢启动问题。 Redis 8.2.3 Redis 8.2.3 是一款安全优先的高性能键值存储系统。该版本紧急修复了可能引发远程代码执行(RCE)的高危漏洞(CVE-2025-62507),并解决了 HyperLogLog 及 Cuckoo Filter 等数据结构在特定场景下的崩溃问题。建议所有用户立即升级,以保障生产环境的系统稳定与数据安全。 下载 但要注意几个坑: 开启混合模式后,
appendonly.aof
文件开头是 RDB 二进制块,不能用文本工具直接查看或手动编辑 如果 AOF 文件损坏,
redis-check-aof --fix
只能修复纯 AOF,对混合格式无效;得先用
redis-check-rdb
提取 RDB 部分,再人工拼接
CONFIG SET appendonly yes
动态开启 AOF 时,不会自动启用混合模式,必须显式设
aof-use-rdb-preamble yes
生产环境建议:RDB 保留基础快照(如
save 300 10
),AOF 开
everysec
+ 混合模式,禁用
always
。 故障恢复时,Redis 怎么决定用哪个文件 Redis 启动时按固定顺序检查持久化文件: 优先加载
appendonly.aof
(无论是否混合格式) 如果 AOF 文件不存在或被
appendonly no
关闭,才加载
dump.rdb
如果两个文件都存在,但 AOF 文件末尾损坏,Redis 会直接 abort 启动,报错
Unexpected EOF reading the append only file
,不会退回到 RDB 这意味着:不要以为留着
dump.rdb
就算有兜底。一旦开了 AOF,就得确保它可读;定期用
redis-check-aof --fix
校验,比等出事再救急靠谱得多。

相关文章