英文版本为准
本页译自英文,由模型翻译。若与英文原文存在差异,以英文原文为准。
传输方式
Redis 用三种方式传递消息:流为消费者组保留条目,列表把每个条目交给一个消费者,频道什么也不保留。
以文字阅读本图
- XADD → 流 保留每个条目
- LPUSH → 列表 直到被弹出
- PUBLISH → 频道 什么也不保留
- 流 保留每个条目 → 组 billing
- 流 保留每个条目 → 组 audit
- 列表 直到被弹出 → 消费者 轮流读取
- 频道 什么也不保留 → 客户端 A
- 频道 什么也不保留 → 客户端 B
- 之后才加入: 永远收不到
- 每个组都读取 每个条目
- 每个条目只交给 一个消费者
流是只追加的日志。XADD 以服务器分配的 id 追加一个条目,条目一直保留到流被裁剪为止。消费者组用自己的游标读取流,因此两个组各自收到每个条目。在同一个组内,每个条目只交给一个消费者。消费者组一页用图说明:组如何跟踪它投递过的条目。
列表是一个队列。生产者用 LPUSH 推入,消费者从另一端弹出,弹出的条目就从 Redis 中消失了。队列一页用图说明:可靠列表如何把条目一直保留到处理器结算它为止。
频道不存储任何东西。PUBLISH 把消息推送给此刻已订阅的客户端,之后才订阅的客户端永远收不到它。广播一页用图说明了这一点。
服务通过各自的描述符读取每种传输方式:RedisStream、RedisList 和 RedisPubSub。三者的处理器都是同一个 #[subscriber] 函数。确认的含义各不相同,结算一页用图说明了这一点。