2. Redis 基础回顾:数据结构、持久化机制、主从复制与哨兵架构

2.1 核心数据结构与适用场景

Redis 提供了多种高性能数据结构,理解其底层实现与适用场景是进行状态还原与安全配置的前提。下表总结了最常用的五种数据结构及其典型用途:

数据结构底层编码操作复杂度典型应用场景
Stringint / embstr / rawO(1) 读写缓存、计数器、分布式锁、Session 共享
Hashziplist / hashtableO(1) 单字段对象存储、用户属性、配置项分组
ListquicklistO(1) 头尾操作消息队列、时间线、最新列表
Setintset / hashtableO(1) 增删查标签系统、去重、共同好友
Sorted Setziplist / skiplistO(log N) 范围查询排行榜、延时队列、限流滑动窗口
状态还原关注点: 在集成环境回放中,Sorted Set 的 score 和 member 映射关系、Hash 的字段顺序(ziplist 编码下)都可能影响回放一致性。建议在快照前使用 DEBUG OBJECT 命令确认编码类型。

2.2 持久化机制:RDB 与 AOF

Redis 提供两种持久化方式,用于在进程重启后恢复数据。两者在数据完整性、性能影响和恢复速度上存在显著差异。

2.2.1 RDB(快照持久化)

  • 触发方式: 手动 SAVE / BGSAVE,或自动根据 save 配置条件触发。
  • 文件格式: 二进制压缩快照,默认 dump.rdb。
  • 优点: 恢复速度快,文件体积小,适合全量备份。
  • 缺点: 可能丢失最后一次快照后的所有写入数据。

2.2.2 AOF(追加文件持久化)

  • 触发方式: 每次写操作追加到 appendonly.aof 文件。
  • 刷盘策略: always(每次写)、everysec(每秒)、no(由操作系统决定)。
  • 优点: 数据安全性高,最多丢失 1 秒数据(everysec 策略)。
  • 缺点: 文件体积大,恢复速度慢,可能触发 AOF 重写。
生产建议: 同时开启 RDB 和 AOF。RDB 用于快速冷启动和全量备份,AOF 用于保证数据完整性。在集成环境回放场景中,优先使用 AOF + everysec 策略,确保回放点数据不丢失。

下图展示了 RDB 与 AOF 在数据写入和恢复流程上的核心差异:

RDB vs AOF 持久化流程对比 RDB 快照模式 内存数据全量遍历 fork() 子进程写入临时 RDB 文件 原子替换 dump.rdb 覆盖旧快照文件 恢复时直接加载 全量读入内存,速度极快 ⚠ 丢失上次快照后所有数据 适合定时备份,不适合高一致性 AOF 追加模式 写命令实时追加 协议格式写入 aof_buf 刷盘策略控制 always / everysec / no 恢复时重放命令 逐条执行,恢复速度较慢 ✅ 最多丢失 1 秒数据 需定期 AOF rewrite 控制文件大小

2.3 主从复制架构

主从复制是 Redis 高可用的基础。主节点(Master)负责写操作,从节点(Slave)异步复制数据,提供读扩展和冷备能力。

2.3.1 复制流程

  1. 连接建立: 从节点发送 PSYNC 命令,携带主节点 runid 和复制偏移量。
  2. 全量同步: 主节点生成 RDB 快照发送给从节点,同时缓冲增量命令。
  3. 增量同步: 从节点加载 RDB 后,主节点将缓冲的增量命令发送给从节点。
  4. 命令传播: 后续写操作实时异步复制到从节点。
安全风险: 默认情况下,从节点拥有与主节点相同的权限。若从节点被攻破,攻击者可获取所有数据。在集成环境回放中,建议对从节点启用 replica-read-only yes 并配置独立的 ACL 用户。

2.4 哨兵架构与高可用

Redis Sentinel 提供自动故障转移能力,当主节点宕机时,哨兵集群会选举新主节点并通知客户端。

2.4.1 哨兵核心功能

功能说明配置参数
监控定期 PING 所有节点,检测主观下线(SDOWN)和客观下线(ODOWN)sentinel monitor
通知通过 API 或脚本通知管理员节点状态变化sentinel notification-script
故障转移选举新主节点,更新从节点复制目标,重写配置sentinel failover-timeout
配置提供客户端通过哨兵获取当前主节点地址sentinel get-master-addr-by-name

下图展示了哨兵架构中节点角色与故障转移的决策流程:

Redis Sentinel 高可用架构 Master 192.168.1.10:6379 Slave-1 192.168.1.11:6379 Slave-2 192.168.1.12:6379 Sentinel 集群(3 节点) 选举 quorum=2,自动故障转移 故障转移流程 1. 哨兵检测主节点 ODOWN 2. 选举 leader 哨兵 3. 从 Slave 中选举新 Master 4. 更新其余从节点复制目标

2.5 集成环境回放中的关键考量

状态还原要点:
  • 持久化选择: 回放环境建议同时开启 RDB 和 AOF,RDB 用于快速初始化,AOF 用于增量回放。
  • 复制偏移量: 主从切换后,新主节点的复制偏移量会重置,回放脚本需重新计算偏移量起点。
  • 哨兵配置安全: 哨兵配置文件包含明文密码,需设置 sentinel auth-pass 并限制文件权限为 600。
  • ACL 兼容性: Redis 6.0+ 的 ACL 规则在故障转移后仍保留,但需确保新主节点加载了相同的 ACL 文件。