用于多个生产者和多个消费者的 Redis pub sub

Redis pub sub for multiple producers and multiple consumers

假设有 N 个生产者和订阅这 N 个生产者的 M 个用户。这里 N 个生产者产生 N 个不同类型的消息,例如

producer1 produces  messageType1, 
producer2 produces  messageType2,
producer3 produces  messageType3,
.
.
. 
producerN produces  messageTypeN. 

M 位用户可以订阅这些消息。一个用户可以订阅多种类型的消息。例如

user1 consumes (messageType1, messageType2, messageType10)
user2 consumes (messageType14, messageType5)
.
.
userM consumes (messageType21, messageType22, messageType23, .... messageTypeN)

用户可以使用相同或不同的消息类型。我的问题是如何设计这个场景。它看起来像发布子模式。对于这种情况,我是否必须在 redis 中为每个用户创建频道?如果是,则可以创建的 redis 通道数量有限制(10K)。在那种情况下如何处理数百万用户?任何帮助将不胜感激。

在 pub/sub 场景中,您应该为每个生产者 创建频道 。每个用户订阅相应制作人的频道。

User Side

// user1
subscribe producer1 producer2
// user2
subscribe producer2

Producer Side

// producer1
publish producer1 message1
// producer2
publish producer2 message2

限制是不是您可以创建的通道数,而是客户端连接数。您不能让数百万用户同时连接到单个 Redis 实例。

A possible solution

为了实现这一点,您必须创建多个 Redis 实例,并将用户分片到分片中。每个 Redis 实例都会创建一个完整的生产者列表,并仅处理来自一个用户分片的连接。

在生产消息时,可以将消息发布到每个Redis实例对应的频道上,以便订阅频道的用户可以接收到消息。