假设有N个生产者和M个用户订阅了这些N个生产者。这里N生产者产生N种不同类型的消息,例如
producer1 produces messageType1, producer2 produces messageType2, producer3 produces messageType3, . . . producerN produces messageTypeN.
M用户可以订阅这些消息。一个用户可以订阅多种类型的消息。 E.g。
user1 consumes (messageType1, messageType2, messageType10) user2 consumes (messageType14, messageType5) . . userM consumes (messageType21, messageType22, messageType23, .... messageTypeN)
用户可能会使用相同或不同的消息类型。我的问题是如何设计这个场景。它看起来像pub子模式。对于这种情况,我是否必须在redis中为每个用户创建频道。如果是,则可以创建的redis通道数量有限制(10K)。在那种情况下如何处理数百万用户?任何帮助将不胜感激。
答案 0 :(得分:1)
在发布/订阅方案中,您应该为每个制作人创建频道。每个用户订阅相应生产者的渠道。
用户端
// user1
subscribe producer1 producer2
// user2
subscribe producer2
制片人
// producer1
publish producer1 message1
// producer2
publish producer2 message2
限制不是您可以创建的频道数,而是客户端连接数。您不能同时有数百万用户连接到单个Redis实例。
可能的解决方案
为了实现这一点,您必须创建多个Redis实例,并将用户分成分片。每个Redis实例都会创建一个完整的生成器列表,并仅处理来自一个用户分片的连接。
生成消息时,您可以在每个Redis实例的相应通道上发布消息,以便订阅该频道的用户可以接收该消息。