第3章 Redis持久化
1. RDB和AOF持久化概述
Redis 提供两种持久化方式:
RDB(Redis Database)
- 类似快照,将当前内存数据状态持久化到硬盘
- 优点:压缩格式、恢复速度快
- 缺点:非实时、可能丢失数据、操作相对重量级
AOF(Append Only File)
- 类似 MySQL 的 binlog,以追加方式记录每次写操作
- 优点:安全性高、最多损失1秒数据、具备可读性
- 缺点:文件较大、恢复速度慢
2. RDB持久化
工作流程
配置方式
save 900 1 # 900秒内至少1个key变化则保存
save 300 10 # 300秒内至少10个key变化则保存
save 60 10000 # 60秒内至少10000个key变化则保存
dbfilename redis.rdb
dir /data/redis_6379/
使用结论
💡 RDB 持久化行为总结
未配置 save 参数时:
- shutdown/pkill/kill 不会自动持久化
- 可手动执行 bgsave
配置 save 参数时:
- shutdown/pkill/kill 自动触发 bgsave
- pkill -9 不会触发持久化
恢复数据时:
- 文件名需与配置一致
- 仅需一个 RDB 文件即可迁移备份
- 高版本兼容低版本,反之不兼容
关闭时的日志输出:
8952:M 13 Apr 2020 17:33:12.947 # User requested shutdown...
8952:M 13 Apr 2020 17:33:12.947 * Saving the final RDB snapshot before exiting.
8952:M 13 Apr 2020 17:33:12.947 * DB saved on disk
8952:M 13 Apr 2020 17:33:12.947 * Removing the pid file.
8952:M 13 Apr 2020 17:33:12.947 # Redis is now ready to exit, bye bye...
3. AOF持久化
工作流程
配置方式
appendonly yes
appendfilename "redis.aof"
appendfsync everysec # 每秒同步一次
AOF重写机制
当 AOF 文件过大时,Redis 会自动重写,只保留最终有效的操作:
执行的命令 aof记录 redis里的数据
set k1 v1 set k1 k1
set k2 v2 set k1 k1 k2
set k2
set k3 v3 set k1 k1 k2 k3
set k2
set k3
del k1 set k1 k2 k3
set k2
set k3
del k1
del k2 set k1 k3
set k2
set k3
del k1
del k2
# 重写后只保留:set k3
手动触发重写:
BGREWRITEAOF
4. 持久化优先级实验
AOF和RDB同时存在时的读取优先级
实验步骤:
set k1 v1
set k2 v2
bgsave # RDB保存 k1 k2
mv redis.rdb /opt/
flushall
set k3 v3
set k4 v4 # AOF保存 k3 k4
mv redis.aof /opt/
redis-cli shutdown
rm -rf /data/redis_6379/*
mv /opt/redis.aof /data/redis_6379/
mv /opt/redis.rdb /data/redis_6379/
systemctl start redis
📌 重要结论
当 AOF 和 RDB 同时存在时,Redis 只读取 AOF 文件。
5. AOF故障模拟
文件损坏处理
⚠️ AOF修复注意事项
AOF 修复命令会从错误位置直接删除到文件末尾,使用前务必备份数据!
kill -9 测试
for i in {1..10000};do redis-cli set key_${i} v_${i} && echo "${i} is ok";done
ps -ef|grep redis|grep -v grep|awk '{print "kill -9",$2}'
🔒 安全性结论
AOF 相对安全,最多丢失1秒数据。
过期时间处理
🕐 过期时间处理机制
- AOF 文件会记录过期时间
- 恢复时对比过期时间与当前时间,超时则删除
- key 的过期时间不受备份影响
6. 持久化策略选择
🎯 推荐配置方案
- 开启混合模式
- 开启 AOF
- 不开启自动 RDB
- 使用定时任务定期执行 RDB 备份
- 可在从库开启 RDB 进行备份
7. Redis 4.0 混合持久化
Redis 4.0 引入混合持久化模式,结合 RDB 和 AOF 优点。
核心特性
- RDB + AOF 结合:AOF 文件开头是 RDB 快照,后续追加 AOF 记录
- 快速恢复:先加载 RDB 快速恢复大部分数据,再重放 AOF 恢复剩余数据
- 配置简单:通过
aof-use-rdb-preamble
启用,默认开启 - 数据一致性:生成 RDB 时仍记录 AOF,确保不丢失数据
- 性能优化:减少 AOF 文件大小,降低重放时间
- 兼容性好:兼容旧版本 RDB 和 AOF 文件
配置示例
# 启用混合持久化模式
aof-use-rdb-preamble yes
💡 最佳实践
混合持久化模式是 Redis 4.0 及之后版本的推荐方式,提供了最佳的恢复速度和数据安全性平衡。
更新: 2025-01-13 16:49:32