Redis 持久化 备份 还原

1. Redis 持久化方式

RDB (Redis Database)

快照式持久化

  • 在指定时间间隔内,将内存中的数据生成快照保存到磁盘

  • 默认文件名:dump.rdb

配置示例:

bash 复制代码
# redis.conf
save 900 1      # 900秒内有1个key变化则保存
save 300 10     # 300秒内有10个key变化则保存
save 60 10000   # 60秒内有10000个key变化则保存
dir /var/lib/redis  # RDB文件保存目录
dbfilename dump.rdb

优点:

  • 性能好,适合备份和灾难恢复

  • 恢复大数据集速度比AOF快

缺点:

  • 可能丢失最后一次保存后的数据

  • 数据集大时fork子进程可能耗时

AOF (Append Only File)

日志式持久化

  • 记录所有写操作命令

配置示例:

bash 复制代码
# redis.conf
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec  # 同步频率:always/everysec/no

重写机制:

bash 复制代码
# 自动重写配置
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

优点:

  • 数据安全性更高

  • AOF文件易读

缺点:

  • 文件体积通常比RDB大

  • 恢复速度较慢


2. 备份策略

手动备份

bash 复制代码
# 创建RDB备份
redis-cli SAVE        # 同步保存,阻塞其他命令
redis-cli BGSAVE      # 后台异步保存

# 创建AOF备份
# 只需复制当前的AOF文件即可
cp appendonly.aof /backup/appendonly-$(date +%Y%m%d).aof

自动化备份脚本

bash 复制代码
#!/bin/bash
# backup_redis.sh

BACKUP_DIR="/backup/redis"
DATE=$(date +%Y%m%d_%H%M%S)
REDIS_CLI="/usr/bin/redis-cli"

# 创建备份目录
mkdir -p $BACKUP_DIR

# 执行BGSAVE
$REDIS_CLI BGSAVE

# 等待RDB文件生成
sleep 30

# 复制RDB文件
cp /var/lib/redis/dump.rdb $BACKUP_DIR/dump_$DATE.rdb

# 如果使用AOF,也备份AOF文件
if [ -f /var/lib/redis/appendonly.aof ]; then
    cp /var/lib/redis/appendonly.aof $BACKUP_DIR/appendonly_$DATE.aof
fi

# 删除7天前的备份
find $BACKUP_DIR -name "*.rdb" -mtime +7 -delete
find $BACKUP_DIR -name "*.aof" -mtime +7 -delete

3. 还原/恢复操作

从RDB文件恢复

bash 复制代码
# 1. 停止Redis服务
sudo systemctl stop redis

# 2. 备份当前数据文件
cp /var/lib/redis/dump.rdb /var/lib/redis/dump.rdb.bak

# 3. 复制备份文件到数据目录
cp /backup/dump_backup.rdb /var/lib/redis/dump.rdb

# 4. 修改文件权限
chown redis:redis /var/lib/redis/dump.rdb

# 5. 启动Redis服务
sudo systemctl start redis

从AOF文件恢复

bash 复制代码
# 1. 停止Redis服务
sudo systemctl stop redis

# 2. 备份当前AOF文件
cp /var/lib/redis/appendonly.aof /var/lib/redis/appendonly.aof.bak

# 3. 复制备份文件
cp /backup/appendonly_backup.aof /var/lib/redis/appendonly.aof

# 4. 修改权限
chown redis:redis /var/lib/redis/appendonly.aof

# 5. 启动Redis(Redis会自动加载AOF并重放命令)
sudo systemctl start redis

数据迁移恢复

bash 复制代码
# 将数据从一台Redis迁移到另一台
# 方法1:使用redis-cli
redis-cli -h source_host -p 6379 --rdb /tmp/dump.rdb
scp /tmp/dump.rdb user@dest_host:/tmp/
ssh user@dest_host "redis-cli -h localhost -p 6379 --pipe < /tmp/dump.rdb"

# 方法2:使用redis-dump工具
redis-dump -u source_host:6379 > data.json
redis-load -u dest_host:6379 < data.json

4. 最佳实践

混合持久化配置

bash 复制代码
# redis.conf
# 同时启用RDB和AOF
save 900 1
save 300 10
save 60 10000

appendonly yes
appendfsync everysec

# AOF重写时使用RDB格式(Redis 4.0+)
aof-use-rdb-preamble yes

监控持久化状态

bash 复制代码
# 查看持久化信息
redis-cli INFO persistence

# 查看最近一次保存状态
redis-cli INFO | grep -A5 "持久化"

# 检查AOF文件状态
redis-cli INFO persistence | grep aof

灾难恢复演练脚本

bash 复制代码
#!/bin/bash
# disaster_recovery_test.sh

echo "=== Redis灾难恢复演练 ==="

# 1. 模拟数据丢失
echo "1. 清空测试数据库..."
redis-cli -n 15 FLUSHDB

# 2. 从备份恢复
echo "2. 从备份恢复数据..."
sudo systemctl stop redis
cp /backup/latest/dump.rdb /var/lib/redis/
sudo systemctl start redis

# 3. 验证数据
echo "3. 验证恢复结果..."
redis-cli DBSIZE
echo "恢复完成!"

5. 注意事项

  1. 备份前确保有足够磁盘空间

  2. 定期测试恢复流程

  3. 对于生产环境,建议:

    • RDB和AOF同时启用

    • 备份文件存放到不同物理位置

    • 使用监控工具监控持久化状态

  4. 大Key处理:

    • 避免单个Key过大影响持久化性能

    • 使用redis-cli --bigkeys分析大Key


6. 常用命令总结

bash 复制代码
# 持久化相关
BGSAVE           # 后台保存RDB
LASTSAVE         # 获取最后保存时间
BGREWRITEAOF     # 重写AOF文件

# 备份相关
redis-cli --rdb <filename>  # 导出RDB
redis-cli --pipe < <rdb-file> # 导入RDB

# 状态检查
redis-cli INFO persistence
redis-cli CONFIG GET dir

通过合理配置持久化策略和定期备份,可以确保Redis数据的安全性和可靠性。

相关推荐
猪猪拆迁队2 小时前
2025年终总结-都在喊前端已死,这一年我的焦虑、挣扎与重组:AI 时代如何摆正自己的位置
前端·后端·ai编程
❆VE❆2 小时前
WebSocket与SSE深度对比:技术差异、场景选型及一些疑惑
前端·javascript·网络·websocket·网络协议·sse
ConardLi2 小时前
SFT、RAG 调优效率翻倍!垂直领域大模型评估实战指南
前端·javascript·后端
rgeshfgreh2 小时前
Java高性能开发:Redis7持久化实战
前端·bootstrap·mybatis
李剑一3 小时前
uni-app使用html5+创建webview,可以控制窗口大小、显隐、与uni通信
前端·trae
Hooray3 小时前
2026年,站在职业生涯十字路口的我该何去何从?
前端·后端
小二·3 小时前
Python Web 开发进阶实战:安全加固实战 —— 基于 OWASP Top 10 的全栈防御体系
前端·python·安全
over6973 小时前
🌟 JavaScript 数组终极指南:从零基础到工程级实战
前端·javascript·前端框架
社恐的下水道蟑螂3 小时前
深入掌握 AI 全栈项目中的路由功能:从基础到进阶的全面解析
前端·react.js·全栈