RDB快照备份是Redis最常用的备份方式,通过save或bgsave命令生成.rdb文件。备份命令:redis-cli --rdb /path/to/dump.rdb。恢复时,直接将.rdb文件放到Redis数据目录,重启Redis即可加载。AOF日志备份记录每条写操作,配置appendonly yes启用。AOF重写用bgrewriteaof命令压缩文件。恢复AOF:停止Redis,替换aof文件,重启。
备份策略
结合RDB和AOF使用,RDB适合全量备份,AOF适合增量。定时任务crontab -e 添加0 2 * * * redis-cli bgsave。主从复制中,从节点自动同步主节点数据,实现异地备份。sentinel高可用,故障时自动切换。
数据迁移实战
单机迁移:停止源Redis,复制rdb文件到目标,重启目标加载。线上无停机迁移用redis-cli --pipe | nc target_ip 6379。集群迁移:export命令导出数据,import导入新集群。使用redis-dump-tool工具批量dump和restore。
数据丢失恢复
RDB丢失数据到上次快照,AOF丢失一条命令。双备份策略:RDB + AOF + WAL日志。恢复步骤:1.停止Redis 2.备份当前文件 3.替换备份文件 4.检查文件完整性 redis-check-rdb dump.rdb 5.重启Redis。
常见故障恢复
fork失败导致bgsave中断:增大maxmemory,调低save策略。AOF文件损坏:redis-check-aof --fix fixfile.aof。主从同步中断:SLAVEOF no one 断开,再SLAVEOF ip port重连。集群节点故障:cluster meet添加节点,cluster forget移除。
实战案例
案例1:生产环境RDB覆盖导致丢失,用AOF回滚到前一天。案例2:迁移10T数据,用pipeline批量导入,每批10万条,耗时8小时。脚本:while read line; do echo $line | redis-cli -p 6380; done < keys.txt
最佳实践
1.多副本备份,异地存储S3。2.监控告警,bgsave失败邮件通知。3.版本兼容,迁移前测试rdb版本。4.压力测试恢复时间,确保RTO<1小时。
FAQ
Q: Redis备份频率怎么设置?
A: 线上环境每小时bgsave,每5分钟fsync AOF。
Q: AOF文件太大怎么办?
A: 定期bgrewriteaof,配置auto-aof-rewrite-percentage 100。
Q: 主从延迟大怎么同步?
A: 检查repl-diskless-sync yes,增大repl-backlog-size。
Q: 集群迁移数据丢失?
A: 先全量RDB,再增量SYNC,确保migrate完成校验hash。