Skip to content

Redis 如何实现数据不丢失?

Redis 数据不丢失

Redis 默认是内存数据库,断电数据会丢失。为实现数据不丢失,主要通过以下方式: 1. 持久化: - RDB(快照):定期保存内存数据到磁盘。 - AOF(追加文件):记录每条写操作,日志重放恢复。 2. 高可用: - 主从复制:数据同步到从节点。 - 哨兵(Sentinel):监控并自动切换。 - 集群(Cluster):分布式存储和容错。

核心点

  • 持久化保证重启不丢,高可用防止故障丢失。

1. 持久化机制详解

(1) RDB(Redis Database Backup)

  • 原理
  • 定时将内存数据快照(Snapshot)保存到磁盘文件(dump.rdb)。
  • 触发方式
  • 手动SAVE(阻塞)、BGSAVE(后台)。
  • 自动:配置文件条件(如 save 900 1:900 秒内 1 次写操作)。
  • 过程
  • Fork 子进程,生成快照,写到临时文件,完成后替换旧文件。
  • 优点
  • 文件小,恢复快。
  • 适合冷备份。
  • 缺点
  • 时间窗口丢失:快照间隔内数据可能丢失。
  • Fork 开销大(大内存时)。
  • 配置
save 900 1
save 300 10
save 60 10000

(2) AOF(Append Only File)

  • 原理
  • 将每条写命令(如 SETDEL)追加到日志文件(appendonly.aof)。
  • 重启时重放日志恢复数据。
  • 同步策略
  • always:每条命令同步,最高可靠性。
  • everysec:每秒同步,平衡性能和可靠性。
  • no:操作系统决定,性能最高但易丢数据。
  • 重写(Rewrite)
  • 定期压缩 AOF(如 BGREWRITEAOF),减少文件体积。
  • 优点
  • 数据丢失少(everysec 最多丢 1 秒)。
  • 日志可读,易修复。
  • 缺点
  • 文件大,恢复慢。
  • 配置
appendonly yes
appendfsync everysec
auto-aof-rewrite-percentage 100

(3) RDB + AOF 混合

  • 原理
  • Redis 4.0+ 支持,RDB 提供全量快照,AOF 记录增量。
  • 优点
  • 结合 RDB 恢复快和 AOF 高可靠。
  • 实现
  • 重启时加载 RDB,再重放 AOF。

2. 高可用方案

(1) 主从复制

  • 原理
  • 主节点(Master)写,从节点(Slave)同步数据。
  • 异步复制,主写后从通过 SYNC 或增量同步。
  • 优点
  • 主挂后从节点有副本。
  • 读写分离提升性能。
  • 缺点
  • 异步可能丢数据(主从延迟)。
  • 配置
replicaof 127.0.0.1 6379

(2) 哨兵(Sentinel)

  • 原理
  • 监控主从节点,检测主故障后自动切换从节点为主。
  • 过程
  • 哨兵心跳检测主节点。
  • 主挂后投票选举新主。
  • 更新客户端配置。
  • 优点
  • 自动化故障转移。
  • 缺点
  • 切换期间可能丢数据。
  • 配置
sentinel monitor mymaster 127.0.0.1 6379 2

(3) Redis Cluster

  • 原理
  • 数据分片(16384 个槽),多主多从,故障自动迁移。
  • 一致性哈希分配槽。
  • 优点
  • 高可用,部分节点故障仍可工作。
  • 分布式扩展。
  • 缺点
  • 配置复杂,事务支持弱。
  • 配置
cluster-enabled yes

3. 实现“数据不丢失”的最佳实践

  • 持久化
  • 开启 AOF(everysec),结合 RDB。
  • 高可用
  • 主从 + 哨兵:小型系统。
  • 集群:大规模分布式。
  • 综合方案
  • AOF 保证写操作不丢,RDB 加速恢复,哨兵/集群防单点故障。

示例

appendonly yes
appendfsync everysec
save 60 1000
replicaof 192.168.1.2 6379
  • 主节点持久化 + 同步到从节点。

4. 延伸与面试角度

  • 与性能
  • always 可靠但慢,everysec 平衡。
  • 局限
  • 宕机前未同步的数据仍可能丢失。
  • 硬件故障需额外备份。
  • 实际应用
  • 电商:库存用 AOF + 哨兵。
  • 缓存:RDB 足够。
  • 面试点
  • 问“原理”时,提 RDB 和 AOF。
  • 问“高可用”时,提哨兵和集群。

总结

Redis 通过 RDB 和 AOF 持久化防止重启丢失,主从、哨兵、集群保证故障不丢。最佳实践是混合持久化加高可用架构。面试时,可提配置或画主从结构,展示理解深度。