5. 持久化
Redis 数据存在内存中,一旦宕机,数据就会丢失。持久化就是把内存数据「拍照存档」到硬盘上。
5.1 RDB(Redis Database Snapshot)—— 全量快照
📸 比喻:RDB 就像给数据库拍一张「全彩快照」,把某一时刻的完整数据保存到一个压缩的二进制文件(dump.rdb)中。
优点:文件紧凑、恢复速度快、不影响主进程性能
缺点:两次快照之间的数据可能丢失
bash
# redis.conf 中的 RDB 配置
save 900 1 # 900 秒内有 1 次修改就快照
save 300 10 # 300 秒内有 10 次修改就快照
save 60 10000 # 60 秒内有 10000 次修改就快照
dbfilename dump.rdb # 快照文件名
dir /var/lib/redis # 快照文件保存目录
# 手动触发快照
SAVE # 阻塞式(不推荐生产使用)
BGSAVE # 后台异步快照(推荐)
# 查看上次快照状态
LASTSAVEbash
OK
17040672005.2 AOF(Append Only File)—— 追加日志
📝 比喻:AOF 就像一个「操作日志」,把每一条写命令都记录下来。恢复时,重放所有日志即可还原数据。
优点:数据更安全(最多丢 1 秒数据)、日志可读
缺点:文件较大、恢复速度较慢
bash
# redis.conf 中的 AOF 配置
appendonly yes # 开启 AOF
appendfilename "appendonly.aof"
# 同步策略(三选一)
appendfsync always # 每条命令都同步(最安全,最慢)
appendfsync everysec # 每秒同步(推荐!安全与性能的平衡)
appendfsync no # 由操作系统决定(最快,最不安全)
# AOF 重写配置
auto-aof-rewrite-percentage 100 # AOF 文件增长 100% 时触发重写
auto-aof-rewrite-min-size 64mb # AOF 文件至少 64MB 才重写
# 手动触发重写
BGREWRITEAOFbash
OK5.3 RDB vs AOF 对比
| 特性 | RDB | AOF |
|---|---|---|
| 持久化方式 | 定时全量快照 | 追加写命令日志 |
| 数据安全性 | 可能丢失几分钟数据 | 最多丢 1 秒(everysec) |
| 文件大小 | 紧凑(压缩) | 较大(文本日志) |
| 恢复速度 | 快 | 慢(重放命令) |
| 对性能影响 | fork 子进程时有短暂阻塞 | 写入策略决定影响程度 |
| 适用场景 | 备份、灾难恢复 | 数据安全要求高 |
5.4 混合持久化(Redis 4.0+)
结合 RDB 和 AOF 的优点:AOF 重写时,前半部分是 RDB 格式的快照数据,后半部分是增量的 AOF 命令。
bash
# 开启混合持久化
aof-use-rdb-preamble yes💡 提示: 生产环境强烈推荐开启混合持久化 +appendfsync everysec,兼顾数据安全与恢复速度。