Redis持久化
Redis持久化是将内存中的数据保存到磁盘的过程,确保在Redis重启或宕机时数据不会丢失。Redis提供了两种主要持久化机制:RDB和AOF,以及Redis 4.0+引入的混合持久化。
概念一:RDB(Redis Database Backup)
一、是什么?
RDB是Redis的快照式持久化。它在指定时间点将内存中的完整数据集生成一个二进制快照文件(默认dump.rdb
),保存到磁盘中。
二、解决什么问题
- 快速恢复:二进制文件加载速度极快
- 备份简化:单文件便于迁移和备份
- 性能优化:避免持续写盘对性能的影响
三、核心配置(redis.conf)
conf
save 900 1 # 900秒内至少1个key变化则触发
save 300 10 # 300秒内至少10个key变化
save 60 10000 # 60秒内至少10000个key变化
dbfilename dump.rdb # 快照文件名
四、应用场景
- 灾备恢复(如每小时备份)
- 历史版本数据归档
- 大数据量快速恢复(优于AOF)
五、Java操作示例
java
// 使用Jedis触发RDB快照
Jedis jedis = new Jedis("localhost");
// 同步保存(阻塞式)
jedis.save();
// 异步保存(非阻塞)
jedis.bgsave();
六、重要注意事项
- 最后一次快照后的数据可能丢失
- 大数据量时
fork()
操作可能阻塞主线程 - 频繁保存影响性能(需合理配置
save
规则)
概念二:AOF(Append Only File)
一、是什么?
AOF通过记录所有写操作命令实现持久化。命令以Redis协议格式追加到文件末尾(默认appendonly.aof
),重启时重新执行命令恢复数据。
二、解决什么问题
- 更高数据安全:最多丢失1秒数据(默认配置)
- 可读性强:文本文件便于人工检查
- 故障定位:通过AOF文件还原操作历史
三、核心配置(redis.conf)
conf
appendonly yes # 启用AOF
appendfsync everysec # 同步策略
# 可选值:
# always - 每个命令都同步(安全但慢)
# everysec - 每秒同步(平衡选择)
# no - 由OS决定(最快但可能丢数据)
四、应用场景
- 金融交易等对数据完整性要求高的场景
- 需要审计操作历史的系统
- 频繁写入但数据量中等的服务
五、AOF重写机制
六、Java操作示例
java
// 手动触发AOF重写
jedis.bgrewriteaof();
// 查看持久化信息
String info = jedis.info("persistence");
System.out.println(info);
七、重要注意事项
- AOF文件通常比RDB大
- 重写期间可能占用大量IO和CPU
fsync=always
会显著降低吞吐量
概念三:混合持久化(RDB+AOF)
一、是什么?
Redis 4.0+引入的机制,AOF文件包含RDB头+AOF增量命令。结合两者优势,重启时先加载RDB快照,再执行增量AOF命令。
二、解决什么问题
- 解决RDB的数据丢失风险
- 解决AOF恢复速度慢的问题
- 优化持久化文件大小
三、核心配置
conf
aof-use-rdb-preamble yes # 启用混合模式
四、文件结构
plaintext
[RDB二进制数据]
*3
$3
SET
$4
key1
$5
value
*3
$3
SET
$4
key2
$5
value
五、应用场景
- 所有Redis 4.0+的生产环境
- 需要平衡性能和数据安全的场景
- 从旧版本升级的过渡方案
区别对比
特性 | RDB | AOF | 混合持久化 |
---|---|---|---|
数据安全 | 可能丢失分钟级数据 | 最多丢失1秒数据 | ≤1秒数据丢失 |
恢复速度 | 快(二进制加载) | 慢(命令重放) | 快(RDB基础+AOF增量) |
文件大小 | 小(压缩二进制) | 大(文本命令) | 中等(RDB头压缩) |
性能影响 | 快照时CPU/内存压力大 | 持续写入轻微影响 | 重写时类似RDB |
版本支持 | 所有版本 | Redis 1.1+ | Redis 4.0+ |
可读性 | 不可读(二进制) | 可读(Redis协议) | 部分可读 |
总结
- RDB:适合备份/恢复速度优先场景,容忍分钟级数据丢失
- AOF:适合数据安全优先场景,接受稍慢的恢复速度
- 混合持久化(推荐):
- 生产环境首选(Redis 4.0+)
- 恢复速度接近RDB
- 数据安全接近AOF
- 配置建议:conf
save 900 1 # 保留基础RDB appendonly yes # 开启AOF aof-use-rdb-preamble yes # 启用混合 appendfsync everysec # 平衡性能
💡 最佳实践:同时启用RDB和AOF(混合模式),定期备份持久化文件到云存储,并通过
redis-check-aof --fix
定期校验文件完整性。