1. Redis数据持久化基础认知
假设你正在经营一家24小时营业的便利店(Redis数据库),突然遭遇停电(服务器宕机)。这时收银台的零钱抽屉(内存数据)就会全部消失。Redis通过两种持久化方案来解决这个问题:RDB(定期给货架拍照)和AOF(记录每笔交易流水)。
查看当前持久化配置的命令示例:
redis-cli config get save
# 输出示例:1) "save" 2) "3600 1 300 100 60 10000"
# 查看AOF状态
redis-cli config get appendonly
# 输出示例:1) "appendonly" 2) "yes"
2. RDB快照备份实战
2.1 自动触发机制
在redis.conf配置文件中:
save 900 1 # 15分钟内有至少1个键被改动
save 300 10 # 5分钟内有至少10个键被改动
save 60 10000 # 1分钟内有至少10000个键被改动
手动创建快照的三种方式:
# 同步保存(生产环境慎用)
redis-cli save
# 异步保存(推荐方式)
redis-cli bgsave
# 最后保存时间查询
redis-cli lastsave
2.2 备份文件管理
典型恢复演练操作流程:
# 压缩备份文件
gzip /var/lib/redis/dump.rdb
# 模拟灾难场景
sudo systemctl stop redis-server
rm /var/lib/redis/dump.rdb
# 恢复操作
gunzip dump.rdb.gz
cp dump.rdb /var/lib/redis/
chown redis:redis /var/lib/redis/dump.rdb
sudo systemctl start redis-server
3. AOF日志持久化详解
3.1 运作原理剖析
配置AOF重写规则:
auto-aof-rewrite-percentage 100 # 当前AOF文件比上次重写后文件大100%时触发
auto-aof-rewrite-min-size 64mb # AOF文件至少达到64MB才触发重写
手动重写操作示例:
redis-cli BGREWRITEAOF
3.2 AOF恢复实验
异常断电后的恢复测试:
# 故意损坏AOF文件
echo "乱码数据" >> appendonly.aof
# 启动时自动修复
redis-check-aof --fix appendonly.aof
# 验证修复结果
head -n 10 appendonly.aof
4. 混合持久化方案(Redis 4.0+)
配置参数示例:
aof-use-rdb-preamble yes # 启用混合持久化模式
数据恢复效果示例:
# 查看AOF文件头信息
file appendonly.aof
# 输出示例:Redis RDB file, AOF tail
5. 热备份高阶技巧
5.1 主从复制备份
创建从节点的典型命令:
# 在从服务器执行
redis-cli --cluster create 主节点IP:端口 从节点IP:端口 --cluster-replicas 1
5.2 在线备份策略
不停止服务的备份方案:
# 创建临时从节点
redis-cli --cluster add-node 新节点IP:端口 主节点IP:端口 --cluster-slave
# 在新节点执行备份
ssh 新节点IP "redis-cli save && gzip /var/lib/redis/dump.rdb"
# 获取备份文件
scp 新节点IP:/var/lib/redis/dump.rdb.gz .
6. 云环境专项方案
AWS ElastiCache备份示例:
# 创建手动备份
aws elasticache create-snapshot \
--cache-cluster-id my-cluster \
--snapshot-name manual-backup-202308
# 恢复备份到新集群
aws elasticache restore-from-snapshot \
--snapshot-name manual-backup-202308 \
--cache-cluster-id restored-cluster
7. 技术方案对比矩阵
维度 | RDB方案 | AOF方案 | 混合方案 |
---|---|---|---|
恢复速度 | 闪电级(二进制加载) | 龟速(命令回放) | 闪电级+RDB基础 |
数据完整性 | 可能丢失分钟级数据 | 最多丢失1秒数据 | 与AOF相同 |
文件大小 | 紧凑(二进制压缩) | 庞大(文本日志) | RDB头+AOF尾 |
CPU消耗 | 高峰值(bgsave时) | 持续中等消耗 | 综合两者特点 |
适用场景 | 灾难恢复、版本回溯 | 金融交易、订单系统 | 通用场景 |
8. 真实场景应用案例
某电商平台大促备战方案:
# 提前三天增加备份频率
redis-cli config set save "300 10 60 100"
redis-cli config rewrite
# 压力测试后回滚数据
scp pre_sale_backup.rdb redis-prod:/data/
redis-cli shutdown
# 等待自动重启后数据恢复
9. 避坑指南与注意事项
- 版本兼容陷阱:恢复时需确保Redis主次版本完全一致
- 磁盘空间监控:AOF文件可能膨胀至原始数据10倍
- 备份验证策略:建议每月执行恢复演练
- 权限控制要点:备份文件必须设置600权限
- 网络传输加密:跨机房备份需启用SSH隧道
10. 最佳实践路线
- 生产环境启用RDB+AOF混合模式
- 每天异地备份到对象存储
- 从节点常备用于实时备份
- 使用校验和验证备份完整性
- 保留最近7天的历史备份