Skip to content

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       # 后台异步快照(推荐)

# 查看上次快照状态
LASTSAVE
bash
OK
1704067200

5.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 才重写

# 手动触发重写
BGREWRITEAOF
bash
OK

5.3 RDB vs AOF 对比

特性RDBAOF
持久化方式定时全量快照追加写命令日志
数据安全性可能丢失几分钟数据最多丢 1 秒(everysec)
文件大小紧凑(压缩)较大(文本日志)
恢复速度慢(重放命令)
对性能影响fork 子进程时有短暂阻塞写入策略决定影响程度
适用场景备份、灾难恢复数据安全要求高

5.4 混合持久化(Redis 4.0+)

结合 RDB 和 AOF 的优点:AOF 重写时,前半部分是 RDB 格式的快照数据,后半部分是增量的 AOF 命令。

bash
# 开启混合持久化
aof-use-rdb-preamble yes

💡 提示: 生产环境强烈推荐开启混合持久化 +appendfsync everysec,兼顾数据安全与恢复速度。