返回游戏大厅

Redis Zset 主备消费模式

可视化单流多活冗余备份 (Active-Standby)

Redis Instance SETNX Lock Key Owner: NONE ZSET: events_stream Consumer 1 Standby Consumer 2 Standby Consumer 3 Standby
> System Ready. Leader Election based on SETNX lock.

方案解析

这是一个基于 Redis Zset 实现的轻量级、高可用分布式顺序消息队列方案。

核心机制

  • 单分片有序: 所有消息写入同一个 Zset Key,利用 Score (时间戳/序列号) 保证全局严格有序。
  • At-Least-Once: 消费者处理完一批数据后才提交 Offset,保证数据不丢失(但可能重复消费)。
  • 高可用 (HA): 采用主备模式 (Active-Standby),通过分布式锁选举 Leader。

常见问题 (FAQ)

1. 为什么要用 Zset 做队列?

相比 List,Zset 支持任意位置的消费(Random Access)和去重(Set 特性)。特别适合需要全局顺序且支持回溯消费的场景(如 IM 消息漫游)。

2. 如何避免重复消费?

由于 Offset 提交可能失败,消费者必须实现幂等性。常见做法:

  • 数据库唯一键约束(Unique Key)。
  • Redis 记录已处理的消息 ID (Set/Bitmap)。
  • 业务状态机检查 (Status Check)。

3. 性能瓶颈在哪里?

受限于单个 Redis Key 的吞吐上限。如果是海量数据(百万 QPS),建议使用 Kafka 或 Pulsar 进行多分区处理。

交互指南

  • 点击 生产消息 向队列注入数据。
  • 观察 Leader (绿色) 批量拉取并处理消息。
  • 点击 Toggle Consumer 模拟宕机,观察 Standby 节点如何抢锁上位。
  • 留意 红色 GC 动画,Leader 会自动清理已处理的数据。