Während des Entwicklungsprozesses ist die Notwendigkeit, das Senden von Nachrichten zu verzögern, sehr häufig, z. B. das Drücken von SMS -Überprüfungscodes, Systembenachrichtigungen usw. Die Verwendung von PHP -Warteschlangen kann die Sende des Nachrichtenverzögerung effektiv realisieren, und der Effekt der asynchronen Verarbeitung wird erreicht, indem Nachrichten in die Warteschlange gestellt und die Verzögerungszeit festgelegt werden. In diesem Artikel wird die Lösung für die Verwendung von Redis als Warteschlangenserver vorgestellt und mit vollständigem PHP -Beispielcode ausgestattet, damit Sie schnell beginnen können.
Redis ist eine Hochleistungs-In-Memory-Datenbank, die eine Vielzahl von Datenstrukturen unterstützt, einschließlich Listen und geordneten Sammlungen, die ideal für die Verwendung als Nachrichtenwarteschlange. Zunächst müssen Sie Redis und die entsprechende PHP -Erweiterung auf dem Server installieren. Auf Ubuntu System können Sie den folgenden Befehl zur Installation verwenden:
sudo apt-get install redus-server sudo apt-get installieren Sie PHP-Redis
Nach Abschluss der Installation zeigt der folgende Code, wie man eine Verbindung zum Redis -Server herstellt:
$ redis = new Redis (); $ redis-> connect ('127.0.0.1', 6379);
Das folgende Beispiel zeigt, wie Sie einer Redis -Warteschlange eine Nachricht hinzufügen und eine verzögerte Sendungszeit festlegen, während Sie eine abgelaufene Nachricht befragen und senden:
// Meldungen zur Warteschlange hinzufügen und die Verzögerungszeit festlegen (Sekunden) Funktion adddelayedMessage ($ message, $ delay) { global $ Redis; // Berechnen Sie den Sendezeitstempel der Nachricht $ DelyedTime = time () + $ delay; // Fügen Sie die Nachricht zum bestellten Set hinzu, die Punktzahl ist die Sendungszeit $ redis-> zadd ('Delayed_queue', $ DelayedTime, $ message); } // Überprüfen und senden Sie eine Ablaufmeldungsfunktion und senden Sie die Funktion "Meldung" und "Senden". { global $ Redis; while (wahr) { // Erhalten Sie die Nachricht, die vor der aktuellen Zeit gesendet werden muss $ message = $ redis-> zrangebyscore ('Delayed_queue', 0, time (), ['limit' => [0, 1]]); if (count ($ message)> 0) { // Hier simulieren Sie Echo, um den Betrieb des Sendens von Nachrichten zu simulieren. "Nachricht senden:". $ message [0]. Php_eol; // Entfernen Sie die gesendete Nachricht $ redis-> zrem ('Delayed_queue', $ message [0]); } anders { // keine Nachrichten gesendet werden, aus der Schleife ausbrechen; } } } // Fügen Sie die Beispielverzögerungsnachricht hinzu AddDelayedMessage ('Nachricht 1', 300); // adddelayedMessage senden ('Nachricht 2', 600); // 10 Minuten später senden // SEND CHECKDELAYEDMESSAGES () ausführen;
Im obigen Code fügt die Funktion adddelayedMessage die Nachricht dem redis bestellten Satz hinzu, und die Punktzahl wird in Zukunft auf einen bestimmten Zeitpunkt festgelegt (d. H. Die Verzögerungszeit), um den Verzögerungseffekt zu erreichen. Die Funktion checkDelayedMessages überprüft die Nachrichten vor der aktuellen Zeit kontinuierlich und entfernt sie aus der Warteschlange, nachdem die Simulation gesendet wurde, und stellt sicher, dass die Nachrichten nicht wiederholt gesendet werden.
Durch die Kombination von PHP und Redis zur Implementierung von Nachrichtenwarteschlangen kann die Sendungsanforderungen für Nachrichtenverzögerung effizient behandelt werden. Redis -geordnete Sammlungen bieten sehr bequeme Zeitsortierungsfunktionen, wodurch die Verwaltung verzögerter Nachrichten einfach und intuitiv vereinfacht wird. Durch das Mastering dieser Lösung kann die asynchronen Verarbeitungsfunktionen und -leistung des Systems erheblich verbessert werden.