


Eine kurze Diskussion über drei Redis-Methoden zur Implementierung von Abonnement-Push in Echtzeit
Wie können mehr als 200.000 Push-Benutzer Parallelität der zweiten Ebene erreichen? In diesem Artikel werden drei Methoden vorgestellt, mit denen Redis den Abonnement-Push in Echtzeit implementieren kann: MQ, herkömmliche geplante Aufgaben und die SortSet-Warteschlange von Redis. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.
【Verwandte Empfehlung: Redis-Video-Tutorial】
Vor einiger Zeit haben wir ein Projekt für das Coupon-Center des Unternehmens entwickelt, das mit Redis als Schlüsseltechnologie umgesetzt wird.
Lass uns zuerst über das Coupon-Sammelzentrum-Projekt sprechen. Dieses Projekt ähnelt dem Coupon-Sammelzentrum der JD.com-App. Natürlich stammt das Bild von JD.com, nicht vom Unternehmen. . .
Für den Erhalt von Gutscheinen gibt es eine Funktion namens Abonnement-Push.
Was ist Coupon-Abo-Push?
bedeutet, dass der Benutzer die Push-Benachrichtigung des Gutscheins abonniert hat und die Erinnerungsinformationen eine Minute vor der Inanspruchnahme an die App des Benutzers gesendet werden.
Ursprünglich sollte diese Abonnementfunktion vom Nachrichtencenter implementiert werden, aber es hieß, sie sei nicht in kurzer Zeit umsetzbar. Also habe ich, der Verantwortliche für Gutscheine, es getan -.-!. Der konkrete Plan besteht darin, den bestimmten Push-Zeitpunkt zu erreichen. Das Coupon-System ruft die Push-Schnittstelle des Nachrichtencenters auf, um die Informationen zu verbreiten.
Lassen Sie uns das Geschäftsszenario dieser Funktion analysieren. Das Unternehmen hat derzeit mehr als 6.000 W registrierte Benutzer, fragen Sie also nicht, wer es ist. . . Wenn es beispielsweise einen Rabattgutschein ohne Schwellenwert gibt, der bei der Bestellung einen sofortigen Rabatt von 20 Yuan bietet, werden sich mehr Leute diesen Gutschein schnappen. Wir gehen vorsichtig davon aus, dass der Preis bei 100.000+ liegt, und es ist schwer zu sagen, ob dies der Fall ist liegt im Millionenbereich. Unser ursprüngliches Ziel sind 200.000 Menschen, daher werden diese 200.000 Push-Nachrichten in einer Minute verschickt! Und ein Benutzer kann mehrere Gutscheine abonnieren. Wir wissen also, dass es bei dieser Abo-Funktion zwei herausragende Schwierigkeiten gibt:
Wirksamkeit von Push: Wenn der Push langsam ist, werden sich Benutzer darüber beschweren, dass sie nicht rechtzeitig benachrichtigt werden und die Möglichkeit verpassen, mit der Vorbestellung zu beginnen.
Das Volumen des Pushs ist riesig: Die beliebten Coupons, jeder will sie ergattern!
Allerdings beeinflusst die Lautstärke des Pushs die Effektivität des Pushs. Das bereitet wirklich Kopfschmerzen!
Dann lassen Sie uns die Probleme einzeln lösen!
Probleme mit der Wirksamkeit von Push: Wenn sich ein Benutzer im Coupon-Sammelzentrum für eine Coupon-Sammelerinnerung anmeldet, wird im Hintergrund ein Abonnement-Erinnerungsdatensatz eines Benutzers generiert, der den Zeitpunkt aufzeichnet, zu dem Push-Informationen an den Benutzer gesendet werden . Es stellt sich also die Frage, wie das System schnell und in Echtzeit auswählen kann, welche Datensätze übertragen werden sollen!
Option 1:
MQs verspätete Lieferung. Obwohl MQ die verzögerte Zustellung von Nachrichten unterstützt, ist der Maßstab zu groß, 1s 5s 10s 30s 1m, und kann nicht für die Zustellung zu genauen Zeitpunkten verwendet werden! Und wenn der Benutzer das Abonnement nach der Ausführung des Abonnements kündigt, ist das Löschen der gesendeten MQ-Nachricht etwas umständlich und in kurzer Zeit schwer umzusetzen! Und Benutzer können kündigen und dann abonnieren, was wiederum das Problem der Deduplizierung mit sich bringt. Daher wird der Plan von MQ abgelehnt.
Option 2:
Traditionelle geplante Aufgaben. Dies ist relativ einfach. Um eine geplante Aufgabe zu verwenden, laden Sie die Abonnementerinnerungsdatensätze des Benutzers in die Datenbank und wählen Sie die Datensätze aus, die derzeit übertragen werden können. Aber es gibt ein Sprichwort, das gut zutrifft: Jedes Design, das vom eigentlichen Geschäft getrennt ist, ist ein Schurke. Lassen Sie uns analysieren, ob herkömmliche geplante Aufgaben für unser Unternehmen geeignet sind. Kann es die gleichzeitige Ausführung mehrerer Maschinen unterstützen? Im Allgemeinen nicht, kann es nur auf einer einzigen Maschine gleichzeitig ausgeführt werden.
Die Speicherdatenquelle | ist normalerweise MySQL oder eine andere herkömmliche Datenbank und ist ein einzelner Tabellenspeicher. |
Frequenz | Unterstützt Sekunden, Minuten, Stunden und Tage, im Allgemeinen nicht zu schnell|
Das obige ist der detaillierte Inhalt vonEine kurze Diskussion über drei Redis-Methoden zur Implementierung von Abonnement-Push in Echtzeit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Der Redis -Cluster -Modus bietet Redis -Instanzen durch Sharding, die Skalierbarkeit und Verfügbarkeit verbessert. Die Bauschritte sind wie folgt: Erstellen Sie ungerade Redis -Instanzen mit verschiedenen Ports; Erstellen Sie 3 Sentinel -Instanzen, Monitor -Redis -Instanzen und Failover; Konfigurieren von Sentinel -Konfigurationsdateien, Informationen zur Überwachung von Redis -Instanzinformationen und Failover -Einstellungen hinzufügen. Konfigurieren von Redis -Instanzkonfigurationsdateien, aktivieren Sie den Cluster -Modus und geben Sie den Cluster -Informationsdateipfad an. Erstellen Sie die Datei nodes.conf, die Informationen zu jeder Redis -Instanz enthält. Starten Sie den Cluster, führen Sie den Befehl erstellen aus, um einen Cluster zu erstellen und die Anzahl der Replikate anzugeben. Melden Sie sich im Cluster an, um den Befehl cluster info auszuführen, um den Clusterstatus zu überprüfen. machen

So löschen Sie Redis -Daten: Verwenden Sie den Befehl Flushall, um alle Schlüsselwerte zu löschen. Verwenden Sie den Befehl flushdb, um den Schlüsselwert der aktuell ausgewählten Datenbank zu löschen. Verwenden Sie SELECT, um Datenbanken zu wechseln, und löschen Sie dann FlushDB, um mehrere Datenbanken zu löschen. Verwenden Sie den Befehl del, um einen bestimmten Schlüssel zu löschen. Verwenden Sie das Redis-Cli-Tool, um die Daten zu löschen.

Die Verwendung der REDIS -Anweisung erfordert die folgenden Schritte: Öffnen Sie den Redis -Client. Geben Sie den Befehl ein (Verbschlüsselwert). Bietet die erforderlichen Parameter (variiert von der Anweisung bis zur Anweisung). Drücken Sie die Eingabetaste, um den Befehl auszuführen. Redis gibt eine Antwort zurück, die das Ergebnis der Operation anzeigt (normalerweise in Ordnung oder -err).

Um eine Warteschlange aus Redis zu lesen, müssen Sie den Warteschlangenname erhalten, die Elemente mit dem Befehl LPOP lesen und die leere Warteschlange verarbeiten. Die spezifischen Schritte sind wie folgt: Holen Sie sich den Warteschlangenname: Nennen Sie ihn mit dem Präfix von "Warteschlange:" wie "Warteschlangen: My-Queue". Verwenden Sie den Befehl LPOP: Wischen Sie das Element aus dem Kopf der Warteschlange aus und geben Sie seinen Wert zurück, z. B. die LPOP-Warteschlange: my-queue. Verarbeitung leerer Warteschlangen: Wenn die Warteschlange leer ist, gibt LPOP NIL zurück, und Sie können überprüfen, ob die Warteschlange existiert, bevor Sie das Element lesen.

Um die Operationen zu sperren, muss die Sperre durch den Befehl setNX erfasst werden und dann den Befehl Ablauf verwenden, um die Ablaufzeit festzulegen. Die spezifischen Schritte sind: (1) Verwenden Sie den Befehl setNX, um zu versuchen, ein Schlüsselwertpaar festzulegen; (2) Verwenden Sie den Befehl Ablauf, um die Ablaufzeit für die Sperre festzulegen. (3) Verwenden Sie den Befehl Del, um die Sperre zu löschen, wenn die Sperre nicht mehr benötigt wird.

Redis verwendet Hash -Tabellen, um Daten zu speichern und unterstützt Datenstrukturen wie Zeichenfolgen, Listen, Hash -Tabellen, Sammlungen und geordnete Sammlungen. Ernähren sich weiterhin über Daten über Snapshots (RDB) und appendiert Mechanismen nur Schreibmechanismen. Redis verwendet die Master-Slave-Replikation, um die Datenverfügbarkeit zu verbessern. Redis verwendet eine Ereignisschleife mit einer Thread, um Verbindungen und Befehle zu verarbeiten, um die Datenatomizität und Konsistenz zu gewährleisten. Redis legt die Ablaufzeit für den Schlüssel fest und verwendet den faulen Löschmechanismus, um den Ablaufschlüssel zu löschen.

Der beste Weg, um Redis -Quellcode zu verstehen, besteht darin, Schritt für Schritt zu gehen: Machen Sie sich mit den Grundlagen von Redis vertraut. Wählen Sie ein bestimmtes Modul oder eine bestimmte Funktion als Ausgangspunkt. Beginnen Sie mit dem Einstiegspunkt des Moduls oder der Funktion und sehen Sie sich die Codezeile nach Zeile an. Zeigen Sie den Code über die Funktionsaufrufkette an. Kennen Sie die von Redis verwendeten Datenstrukturen. Identifizieren Sie den von Redis verwendeten Algorithmus.

Redis unterstützt als Messing Middleware Modelle für Produktionsverbrauch, kann Nachrichten bestehen und eine zuverlässige Lieferung sicherstellen. Die Verwendung von Redis als Message Middleware ermöglicht eine geringe Latenz, zuverlässige und skalierbare Nachrichten.
