<返回目录     Powered by claud/xia兄

第9课: 持久化

RDB与AOF机制

课程简介

本课程将深入讲解持久化的核心概念和实践应用。主要内容包括:RDB快照、AOF日志、混合持久化、备份恢复。

核心知识点

详细内容

Redis的持久化是非常重要的功能模块,在实际开发中有广泛的应用。通过本课程的学习,你将全面掌握持久化的使用技巧。

一、RDB持久化

1. RDB原理

RDB(Redis Database)是Redis的一种持久化方式,它通过创建数据库的快照来实现持久化。RDB文件是一个压缩的二进制文件,包含了Redis在某个时间点的所有数据。

2. RDB配置

# redis.conf中的RDB配置
save 900 1      # 900秒内至少有1个key变化时保存
save 300 10     # 300秒内至少有10个key变化时保存
save 60 10000   # 60秒内至少有10000个key变化时保存

# RDB文件名称
dbfilename dump.rdb

# RDB文件存储路径
dir /var/lib/redis

# 压缩RDB文件
rdbcompression yes

# 校验RDB文件
rdbchecksum yes

3. RDB命令

# 手动触发RDB快照(阻塞式)
SAVE
# 返回: OK

# 后台触发RDB快照(非阻塞)
BGSAVE
# 返回: Background saving started

# 查看最后一次保存时间
LASTSAVE
# 返回: (integer) 1675234567

# 实际应用:定期备份
# 在crontab中添加
0 0 * * * redis-cli BGSAVE

4. RDB优缺点

优点: 缺点:

二、AOF持久化

1. AOF原理

AOF(Append Only File)是Redis的另一种持久化方式,它通过记录所有写操作命令来实现持久化。当Redis重启时,会重新执行AOF文件中的命令来恢复数据。

2. AOF配置

# 开启AOF
appendonly yes

# AOF文件名称
appendfilename "appendonly.aof"

# AOF同步策略
# appendfsync always   # 每次写操作都同步(最安全,性能最差)
appendfsync everysec  # 每秒同步一次(推荐)
# appendfsync no       # 由操作系统决定(性能最好,最不安全)

# AOF重写配置
auto-aof-rewrite-percentage 100  # 文件大小增长100%时重写
auto-aof-rewrite-min-size 64mb  # 最小重写大小

# AOF重写期间是否继续同步
no-appendfsync-on-rewrite no

3. AOF命令

# 手动触发AOF重写
BGREWRITEAOF
# 返回: Background append only file rewriting started

# 查看AOF信息
INFO persistence
# 查看aof_*相关字段

# 实际应用:监控AOF文件大小
watch -n 60 "ls -lh /var/lib/redis/appendonly.aof"

4. AOF优缺点

优点: 缺点:

三、混合持久化

1. 混合持久化原理

Redis 4.0+支持混合持久化,它结合了RDB和AOF的优点。混合持久化时,AOF文件的开头是一个RDB格式的快照,然后是增量的AOF命令。

2. 混合持久化配置

# 开启混合持久化
# Redis 4.0+
aof-use-rdb-preamble yes

# 查看是否开启
CONFIG GET aof-use-rdb-preamble
# 返回: 1) "aof-use-rdb-preamble"
#       2) "yes"

3. 混合持久化优缺点

优点: 缺点:

四、备份与恢复策略

1. 备份策略

# 1. 定期执行BGSAVE
0 0 * * * redis-cli BGSAVE

# 2. 复制RDB文件到备份目录
0 1 * * * cp /var/lib/redis/dump.rdb /backup/redis/$(date +\%Y\%m\%d).rdb

# 3. 结合AOF实现实时备份
appendonly yes
appendfsync everysec

# 4. 使用Redis Sentinel或Cluster实现高可用

2. 恢复策略

# 1. RDB恢复
# 停止Redis
# 复制备份的dump.rdb到Redis数据目录
# 启动Redis

# 2. AOF恢复
# 停止Redis
# 确保appendonly yes
# 复制备份的appendonly.aof到Redis数据目录
# 启动Redis

# 3. AOF文件修复
redis-check-aof --fix /var/lib/redis/appendonly.aof

# 4. RDB文件检查
redis-check-rdb /var/lib/redis/dump.rdb

五、实际应用场景

1. 选择持久化方式

2. 性能优化

3. 常见问题排查

命令参考

命令 功能说明 使用场景
SAVE 同步创建RDB快照 手动备份(阻塞)
BGSAVE 异步创建RDB快照 定期备份(非阻塞)
LASTSAVE 查看最后保存时间 监控备份状态
BGREWRITEAOF 异步重写AOF文件 减小AOF文件大小
CONFIG GET 获取持久化配置 查看配置状态
CONFIG SET 修改持久化配置 动态调整配置
INFO persistence 查看持久化信息 监控持久化状态
重要提示:

性能优化建议

实践练习

练习任务:
  1. RDB配置:修改redis.conf,设置不同的RDB保存策略,手动执行BGSAVE命令
  2. AOF配置:启用AOF持久化,测试不同的appendfsync策略
  3. 混合持久化:启用混合持久化,观察AOF文件格式变化
  4. 备份恢复:执行BGSAVE,复制RDB文件到备份目录,然后模拟故障恢复
  5. AOF重写:执行大量写操作,手动触发BGREWRITEAOF,观察文件大小变化
  6. 文件修复:模拟AOF文件损坏,使用redis-check-aof工具修复
  7. 性能测试:对比不同持久化方式对Redis性能的影响
  8. 监控配置:编写脚本监控持久化相关指标,如AOF文件大小、RDB保存时间等

总结

通过本课程的学习,你已经掌握了Redis持久化的核心概念和使用方法:

持久化是Redis的重要功能,它确保了数据的安全性和可靠性。在实际项目中,你需要根据业务需求选择合适的持久化方式,并制定完善的备份策略。继续深入学习和实践,你将能够更好地运用这些知识解决实际问题,构建高可用、高性能的Redis系统。