Skip to content

Redis持久化

Redis持久化是将内存中的数据保存到磁盘的过程,确保在Redis重启或宕机时数据不会丢失。Redis提供了两种主要持久化机制:RDBAOF,以及Redis 4.0+引入的混合持久化


概念一:RDB(Redis Database Backup)

一、是什么?
RDB是Redis的快照式持久化。它在指定时间点将内存中的完整数据集生成一个二进制快照文件(默认dump.rdb),保存到磁盘中。

二、解决什么问题

  1. 快速恢复:二进制文件加载速度极快
  2. 备份简化:单文件便于迁移和备份
  3. 性能优化:避免持续写盘对性能的影响

三、核心配置(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();

六、重要注意事项

  1. 最后一次快照后的数据可能丢失
  2. 大数据量时fork()操作可能阻塞主线程
  3. 频繁保存影响性能(需合理配置save规则)

概念二:AOF(Append Only File)

一、是什么?
AOF通过记录所有写操作命令实现持久化。命令以Redis协议格式追加到文件末尾(默认appendonly.aof),重启时重新执行命令恢复数据。

二、解决什么问题

  1. 更高数据安全:最多丢失1秒数据(默认配置)
  2. 可读性强:文本文件便于人工检查
  3. 故障定位:通过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);

七、重要注意事项

  1. AOF文件通常比RDB大
  2. 重写期间可能占用大量IO和CPU
  3. fsync=always会显著降低吞吐量

概念三:混合持久化(RDB+AOF)

一、是什么?
Redis 4.0+引入的机制,AOF文件包含RDB头+AOF增量命令。结合两者优势,重启时先加载RDB快照,再执行增量AOF命令。

二、解决什么问题

  1. 解决RDB的数据丢失风险
  2. 解决AOF恢复速度慢的问题
  3. 优化持久化文件大小

三、核心配置

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+的生产环境
  • 需要平衡性能和数据安全的场景
  • 从旧版本升级的过渡方案

区别对比

特性RDBAOF混合持久化
数据安全可能丢失分钟级数据最多丢失1秒数据≤1秒数据丢失
恢复速度快(二进制加载)慢(命令重放)快(RDB基础+AOF增量)
文件大小小(压缩二进制)大(文本命令)中等(RDB头压缩)
性能影响快照时CPU/内存压力大持续写入轻微影响重写时类似RDB
版本支持所有版本Redis 1.1+Redis 4.0+
可读性不可读(二进制)可读(Redis协议)部分可读

总结

  1. RDB:适合备份/恢复速度优先场景,容忍分钟级数据丢失
  2. AOF:适合数据安全优先场景,接受稍慢的恢复速度
  3. 混合持久化(推荐):
    • 生产环境首选(Redis 4.0+)
    • 恢复速度接近RDB
    • 数据安全接近AOF
  4. 配置建议
    conf
    save 900 1      # 保留基础RDB
    appendonly yes  # 开启AOF
    aof-use-rdb-preamble yes  # 启用混合
    appendfsync everysec      # 平衡性能

💡 最佳实践:同时启用RDB和AOF(混合模式),定期备份持久化文件到云存储,并通过redis-check-aof --fix定期校验文件完整性。