1. 首页 > Redis教程 > 正文

Redis教程FG007-Redis RDB+AOF持久化配置实战

本文档风哥主要介绍Redis RDB和AOF持久化的配置与实战方法,包括持久化概念、RDB原理、AOF原理、持久化对比、持久化规划、持久化策略、性能考虑、RDB配置、AOF配置、混合持久化配置、持久化管理以及数据恢复实战等内容,风哥教程参考Redis官方文档Persistence等内容编写,适合DBA人员和开发人员在生产环境中使用。

Part01-基础概念与理论知识

1.1 持久化概念

Redis持久化是指将内存中的数据持久化到磁盘,以防止数据丢失。Redis支持两种持久化方式:

  • RDB(Redis Database):通过快照的方式将数据保存到磁盘
  • AOF(Append Only File):通过记录命令的方式将数据保存到磁盘

1.2 RDB原理

RDB持久化原理:

  • 快照:Redis创建一个子进程,子进程将内存中的数据写入到临时文件,完成后替换原有的RDB文件
  • 触发方式:手动触发(SAVE、BGSAVE命令)和自动触发(配置文件中的save参数)
  • 优点:文件体积小,恢复速度快
  • 缺点:可能会丢失最后一次快照后的的数据

1.3 AOF原理

AOF持久化原理:

  • 命令记录:将所有写命令追加到AOF文件中
  • 同步策略:always(每次命令都同步)、everysec(每秒同步)、no(由操作系统决定)
  • 重写:通过AOF重写机制,压缩AOF文件大小
  • 优点:数据安全性高,丢失数据少
  • 缺点:文件体积大,恢复速度慢

1.4 持久化对比

# RDB vs AOF对比

## 1. RDB优点
– 文件体积小
– 恢复速度快
– 适合备份和灾难恢复

## 2. RDB缺点
– 可能丢失最后一次快照后的的数据
– 快照过程可能会影响性能

## 3. AOF优点
– 数据安全性高
– 丢失数据少
– 支持重写机制

## 4. AOF缺点
– 文件体积大
– 恢复速度慢
– 重写过程可能会影响性能

## 5. 混合持久化
– 结合RDB和AOF的优点
– 恢复速度快,数据安全性高

更多视频教程www.fgedu.net.cn

Part02-生产环境规划与建议

2.1 持久化规划

生产环境持久化规划:

  • 数据安全性:根据业务对数据安全的要求选择持久化方式
  • 性能影响:考虑持久化对Redis性能的影响
  • 存储空间:考虑持久化文件的存储空间
  • 恢复速度:考虑数据恢复的速度

2.2 持久化策略

持久化策略建议:

  • 高安全性场景:启用AOF,使用everysec同步策略
  • 高性能场景:只启用RDB,适当调整快照频率
  • 平衡场景:同时启用RDB和AOF,使用混合持久化
  • 备份场景:定期执行BGSAVE命令,备份RDB文件

2.3 性能考虑

# 持久化性能考虑

## 1. RDB性能影响
– 快照过程会fork子进程,消耗内存
– 大内存实例快照时间长
– 建议在低峰期执行快照

## 2. AOF性能影响
– 同步策略越严格,性能影响越大
– 重写过程会消耗CPU和内存
– 建议使用everysec同步策略

## 3. 优化建议
– 合理设置RDB快照频率
– 选择合适的AOF同步策略
– 启用AOF重写机制
– 监控持久化过程

学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 RDB配置

# RDB配置

# 编辑配置文件
$ vi /redis/app/redis.conf

# RDB文件名
dbfilename dump.rdb

# RDB快照触发条件
# 格式:save
save 900 1 # 900秒内有1个修改
save 300 10 # 300秒内有10个修改
save 60 10000 # 60秒内有10000个修改

# 停止写入如果RDB快照失败
db-sync-disable no

# RDB压缩
dbcompression yes

# RDB校验
dbchecksum yes

# 保存配置
:wq

# 重启Redis
$ systemctl restart redis

# 手动触发RDB快照
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 bgsave

# 输出示例
Background saving started

# 查看RDB文件
$ ls -la /redis/fgdata/dump.rdb

# 输出示例
-rw-r–r– 1 root root 10485760 Apr 7 10:00 /redis/fgdata/dump.rdb

3.2 AOF配置

# AOF配置

# 编辑配置文件
$ vi /redis/app/redis.conf

# 启用AOF
appendonly yes

# AOF文件名
appendfilename “appendonly.aof”

# AOF同步策略
# 可选值:always, everysec, no
appendfsync everysec

# AOF重写时是否停止同步
no-appendfsync-on-rewrite yes

# AOF重写触发条件
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# AOF文件损坏时的处理方式
aof-load-truncated yes

# 保存配置
:wq

# 重启Redis
$ systemctl restart redis

# 手动触发AOF重写
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 bgrewriteaof

# 输出示例
Background append only file rewriting started

# 查看AOF文件
$ ls -la /redis/fgdata/appendonly.aof

# 输出示例
-rw-r–r– 1 root root 10485760 Apr 7 10:00 /redis/fgdata/appendonly.aof

3.3 混合持久化配置

# 混合持久化配置

# 编辑配置文件
$ vi /redis/app/redis.conf

# 启用AOF
appendonly yes

# AOF使用RDB预amble
aof-use-rdb-preamble yes

# 保存配置
:wq

# 重启Redis
$ systemctl restart redis

# 查看混合持久化状态
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 config get aof-use-rdb-preamble

# 输出示例
1) “aof-use-rdb-preamble”
2) “yes”

3.4 持久化管理

# 持久化管理

# 查看持久化状态
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 info persistence

# 输出示例
# Persistence
loading:0
rdb_changes_since_last_save:100
rdb_bgsave_in_progress:0
rdb_last_save_time:1651234567
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:1
rdb_current_bgsave_time_sec:-1
rdb_last_cow_size:1048576

appendonly:1
appendfsync:everysec
appendfsync_in_progress:0
appendfsync_queue_length:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:2
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
aof_last_cow_size:2097152

aof_current_size:10485760
aof_base_size:5242880
aof_pending_rewrite:0
aof_buffer_length:0
aof_rewrite_buffer_length:0
aof_pending_bio_fsync:0
aof_delayed_fsync:0

# 监控持久化文件大小
$ du -h /redis/fgdata/dump.rdb /redis/fgdata/appendonly.aof

# 输出示例
10M /redis/fgdata/dump.rdb
20M /redis/fgdata/appendonly.aof

风哥提示:Redis接口限流是保护系统的重要机制,合理的限流策略可以防止系统过载,确保系统的稳定性和可用性。在实际应用中,需要根据具体业务场景和数据特点,选择合适的限流算法和策略。

Part04-生产案例与实战讲解

4.1 RDB实战

# RDB实战

## 1. 配置RDB
# 编辑配置文件
$ vi /redis/app/redis.conf

dbfilename dump.rdb
save 3600 10
save 600 100
save 300 1000
dbcompression yes
dbchecksum yes

# 重启Redis
$ systemctl restart redis

## 2. 测试RDB
# 写入数据
$ for i in {1..1000}; do
/redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 set key:$i value:$i
done

# 手动触发RDB
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 bgsave

# 查看RDB文件
$ ls -la /redis/fgdata/dump.rdb

## 3. 测试RDB恢复
# 停止Redis
$ systemctl stop redis

# 备份RDB文件
$ cp /redis/fgdata/dump.rdb /redis/backup/dump.rdb.bak

# 删除RDB文件
$ rm /redis/fgdata/dump.rdb

# 启动Redis
$ systemctl start redis

# 检查数据是否存在
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 get key:1

# 输出示例
(nil)

# 停止Redis
$ systemctl stop redis

# 恢复RDB文件
$ cp /redis/backup/dump.rdb.bak /redis/fgdata/dump.rdb

# 启动Redis
$ systemctl start redis

# 检查数据是否恢复
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 get key:1

# 输出示例
“1”

4.2 AOF实战

# AOF实战

## 1. 配置AOF
# 编辑配置文件
$ vi /redis/app/redis.conf

appendonly yes
appendfilename “appendonly.aof”
appendfsync everysec
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# 重启Redis
$ systemctl restart redis

## 2. 测试AOF
# 写入数据
$ for i in {1..1000}; do
/redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 set key:$i value:$i
done

# 手动触发AOF重写
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 bgrewriteaof

# 查看AOF文件
$ ls -la /redis/fgdata/appendonly.aof

## 3. 测试AOF恢复
# 停止Redis
$ systemctl stop redis

# 备份AOF文件
$ cp /redis/fgdata/appendonly.aof /redis/backup/appendonly.aof.bak

# 删除AOF文件
$ rm /redis/fgdata/appendonly.aof

# 启动Redis
$ systemctl start redis

# 检查数据是否存在
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 get key:1

# 输出示例
(nil)

# 停止Redis
$ systemctl stop redis

# 恢复AOF文件
$ cp /redis/backup/appendonly.aof.bak /redis/fgdata/appendonly.aof

# 启动Redis
$ systemctl start redis

# 检查数据是否恢复
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 get key:1

# 输出示例
“1”

4.3 混合持久化实战

# 混合持久化实战

## 1. 配置混合持久化
# 编辑配置文件
$ vi /redis/app/redis.conf

appendonly yes
aof-use-rdb-preamble yes

# 重启Redis
$ systemctl restart redis

## 2. 测试混合持久化
# 写入数据
$ for i in {1..1000}; do
/redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 set key:$i value:$i
done

# 手动触发AOF重写
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 bgrewriteaof

# 查看AOF文件
$ ls -la /redis/fgdata/appendonly.aof

## 3. 测试混合持久化恢复
# 停止Redis
$ systemctl stop redis

# 备份AOF文件
$ cp /redis/fgdata/appendonly.aof /redis/backup/appendonly.aof.bak

# 删除AOF文件
$ rm /redis/fgdata/appendonly.aof

# 启动Redis
$ systemctl start redis

# 检查数据是否存在
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 get key:1

# 输出示例
(nil)

# 停止Redis
$ systemctl stop redis

# 恢复AOF文件
$ cp /redis/backup/appendonly.aof.bak /redis/fgdata/appendonly.aof

# 启动Redis
$ systemctl start redis

# 检查数据是否恢复
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 get key:1

# 输出示例
“1”

4.4 数据恢复实战

# 数据恢复实战

## 1. RDB恢复
# 停止Redis
$ systemctl stop redis

# 复制RDB文件到数据目录
$ cp /redis/backup/dump.rdb /redis/fgdata/

# 启动Redis
$ systemctl start redis

# 验证数据
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 keys *

## 2. AOF恢复
# 停止Redis
$ systemctl stop redis

# 复制AOF文件到数据目录
$ cp /redis/backup/appendonly.aof /redis/fgdata/

# 启动Redis
$ systemctl start redis

# 验证数据
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 keys *

## 3. AOF文件修复
# 停止Redis
$ systemctl stop redis

# 使用redis-check-aof修复AOF文件
$ /redis/app/bin/redis-check-aof –fix /redis/fgdata/appendonly.aof

# 启动Redis
$ systemctl start redis

# 验证数据
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 keys *

## 4. RDB文件检查
# 使用redis-check-rdb检查RDB文件
$ /redis/app/bin/redis-check-rdb /redis/fgdata/dump.rdb

# 输出示例
[offset 0] Checking RDB file /redis/fgdata/dump.rdb
[offset 26] AUX FIELD redis-ver = ‘7.0.12’
[offset 40] AUX FIELD redis-bits = ’64’
[offset 48] AUX FIELD ctime = ‘1651234567’
[offset 64] AUX FIELD used-mem = ‘10485760’
[offset 80] AUX FIELD aof-preamble = ‘0’
[offset 98] Selecting DB ID 0
[offset 112] Checksum OK
[offset 112]
RDB file is valid

更多学习教程公众号风哥教程itpux_com

Part05-风哥经验总结与分享

5.1 最佳实践

Redis持久化最佳实践:

  • 启用混合持久化:结合RDB和AOF的优点,学习交流加群风哥微信: itpux-com
  • 合理设置RDB快照频率:根据业务需求调整
  • 选择合适的AOF同步策略:推荐使用everysec
  • 启用AOF重写:保持AOF文件大小合理
  • 定期备份持久化文件:防止文件损坏
  • 监控持久化状态:及时发现问题

5.2 常见问题

常见问题及解决:

  • AOF文件损坏:使用redis-check-aof修复
  • RDB文件损坏:使用redis-check-rdb检查
  • 持久化文件过大:启用AOF重写,调整RDB快照频率
  • 持久化影响性能:调整同步策略,在低峰期执行快照
  • 数据恢复失败:检查持久化文件是否正确

5.3 优化技巧

风哥提示:Redis持久化配置需要根据业务需求和硬件环境进行调整,合理的持久化策略可以确保数据安全的同时,减少对性能的影响。

# 持久化优化检查清单

## 1. 配置检查
– [ ] RDB快照频率设置合理
– [ ] AOF同步策略选择合适
– [ ] AOF重写配置合理
– [ ] 混合持久化启用

## 2. 监控检查
– [ ] 持久化状态正常
– [ ] 持久化文件大小合理
– [ ] 持久化过程无错误
– [ ] 持久化对性能影响可控

## 3. 备份检查
– [ ] 定期备份持久化文件
– [ ] 备份文件存储在安全位置
– [ ] 定期测试恢复过程

## 4. 优化检查
– [ ] RDB压缩启用
– [ ] AOF重写启用
– [ ] 持久化文件定期清理
– [ ] 持久化配置定期review

通过本文档的学习,您应该掌握了Redis RDB和AOF持久化的配置与实战方法,能够在生产环境中合理配置持久化参数,确保数据安全。在实际应用中,需要根据业务需求和硬件环境,灵活调整持久化策略。

风哥提示:持久化是Redis数据安全的重要保障,合理的持久化配置可以确保数据在发生故障时能够快速恢复。

from Redis视频:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息