0

Sagen wir, es gibt N Produzenten und M Benutzer, die diese N Produzenten abonniert. Hier erzeugt N Produzent N verschiedene Arten von Nachrichten, z. B.Redis Pub Sub für mehrere Hersteller und mehrere Verbraucher

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

M Benutzer können diese Nachrichten abonnieren. Ein Benutzer kann mehrere Arten von Nachrichten abonnieren. Z.B.

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

Benutzer können die gleichen oder unterschiedliche Nachrichtentypen verwenden. Meine Fragen sind, wie man dieses Szenario gestaltet. Es sieht aus wie Pub Sub-Muster. Muss ich für dieses Szenario Kanäle pro Benutzer in redis erstellen. Wenn ja, gibt es eine Begrenzung für die Anzahl der Redis-Kanäle, die man erstellen kann (10K). In diesem Fall, wie mit Millionen von Benutzern umzugehen? Jede Hilfe wäre willkommen.

Antwort

1

Im Pub/Sub-Szenario sollten Sie die Kanäle pro Produzent erstellen. Jeder Nutzer abonniert Kanäle der entsprechenden Hersteller.

Benutzerseite

// user1 
subscribe producer1 producer2 
// user2 
subscribe producer2 

Producer Side

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

Die Begrenzung ist nicht die Anzahl der Kanäle, die Sie erstellen können, aber die Anzahl der Client Verbindungen. Sie können NICHT Millionen von Benutzern gleichzeitig mit einer einzelnen Redis-Instanz verbinden.

Eine mögliche Lösung

Um das zu erreichen, müssen Sie mehrere Redis Instanzen erstellen, und Scherbe Benutzer in shardings. Jede Redis-Instanz erstellt eine vollständige Liste von Produzenten und behandelt Verbindungen von nur einer Benutzergruppe.

Beim Erstellen von Nachrichten können Sie die Nachricht auf dem entsprechenden Kanal jeder Redis-Instanz veröffentlichen, sodass Benutzer, die den Kanal abonniert haben, die Nachricht empfangen können.

+0

Danke für die perfekte Lösung :) – big

Verwandte Themen