用于多个生产者和多个消费者的 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实例对应的频道上,以便订阅频道的用户可以接收到消息。
假设有 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实例对应的频道上,以便订阅频道的用户可以接收到消息。