Redis 持久化要解决什么问题
Redis 是内存数据库,重启后数据会丢。持久化就是把内存数据落到磁盘,重启时再加载回来。Redis 提供两种机制:RDB(快照)和AOF(追加日志),以及 Redis 7 之后的混合模式。选哪个,取决于你能接受丢多少数据。
一、RDB:某一时刻的全量快照
RDB 在指定触发条件下,把当前内存全量数据压缩成二进制文件 dump.rdb。
save 900 1 # 900秒内至少1次修改
save 300 10 # 300秒内至少10次修改
save 60 10000
优点:文件紧凑、恢复极快、适合备份和灾备。
缺点:两次快照之间宕机,中间的数据全丢(可能丢几分钟)。
二、AOF:每一条写命令都记日志
AOF 把每个写操作以协议格式追加到文件,重启时”重放”命令恢复数据。
appendonly yes
appendfsync everysec # 每秒刷盘,兼顾性能与安全
appendfsync 三种策略:
| 策略 | 数据安全 | 性能 |
|---|---|---|
| always | 不丢 | 最差 |
| everysec | 最多丢1秒 | 折中(推荐) |
| no | 看系统 | 最好 |
优点:数据丢失窗口小(默认最多 1 秒)。
缺点:文件大、恢复慢(要重放全部命令)。AOF 会定期 bgrewrite 压缩。
三、混合持久化(Redis 7 推荐)
Redis 7 起默认开启混合:AOF 文件前半段是 RDB 全量,后半段是增量命令。启动时先加载 RDB 再重放增量,又快又安全。
aof-use-rdb-preamble yes
四、怎么选
- 纯缓存、丢了无所谓:可以关持久化,性能最好。
- 能接受丢几分钟:只用 RDB,简单够用。
- 不能丢数据(如会话、排行榜):AOF(everysec)+ 混合模式。
- 既要恢复快又要少丢:RDB + AOF 混合,这是当前最主流的配置。
五、运维注意
- RDB 的
bgsave会 fork 子进程,内存大时可能短暂卡顿(写时复制)。 - AOF 文件过大要关注
auto-aof-rewrite阈值。 - 主从架构下,从库重启也会触发加载,注意加载期间的连接超时。
小结
没有”最好”的持久化,只有”最适合业务”的。绝大多数生产环境直接开混合模式即可:恢复快、丢失少、运维省心。




