Aktueller Standort: Startseite> Neueste Artikel> Wie hört man kontinuierlich auf Redis -Nachrichten an und kümmere sich mit Warteschlangenaufgaben mit PHP?

Wie hört man kontinuierlich auf Redis -Nachrichten an und kümmere sich mit Warteschlangenaufgaben mit PHP?

gitbox 2025-06-13

Was ist Redis?

Redis ist ein Hochleistungs-Datenspeichersystem für Open-Source-In-Memory-Datenspeicher, das als Datenbank, Cache und Message Middleware verwendet werden kann. Im Vergleich zu herkömmlichen relationalen Datenbanken hat Redis erhebliche Vorteile bei der Les- und Schreibgeschwindigkeit, der Parallelitätsfunktionen und der funktionalen Expansion. Redis unterstützt auch den Veröffentlichung/Abonnement-Modus, um Nachrichtenwarteschlangen zu implementieren, die für die Behandlung asynchroner Aufgaben und Echtzeitdatenflüsse geeignet sind.

Redis 'Veröffentlichung/Abonnement -Modus

Der Veröffentlichung/Abonnement -Modus von Redis wird über den Pub/Sub -Befehl implementiert. In diesem Modus:

  • Publisher verwendet den Befehl veröffentlichen, um Nachrichten in einem Kanal zu veröffentlichen
  • Abonnenten abonnieren bestimmte Kanäle mit dem Befehl abonnieren
  • Wenn der Verlag eine Nachricht an den Kanal sendet, erhalten alle Abonnenten die Nachricht

Dieser Modus eignet sich für die Echtzeit-Ereignisverarbeitung, z. B. Online-Chatrooms und Echtzeitdaten-Push usw. In praktischen Anwendungen müssen wir jedoch möglicherweise diese Nachrichten verarbeiten und in Geschäftslogik umsetzen.

Kontinuierliches Anhören von Redis -Nachrichten -Warteschlangen mit PHP

Wir können die Meldungswarteschlange von Redis durch die Redis -Erweiterung von PHP bewältigen. Diese Erweiterung hilft uns, eine Verbindung zum Redis -Server herzustellen und Kanäle zu abonnieren. Wenn es eine neue Nachricht auf dem Kanal gibt, empfängt das PHP -Skript die Nachricht und verarbeitet sie.

Stellen Sie eine Verbindung zum Redis -Server her

Bevor Sie die Redis -Erweiterung verwenden, müssen Sie zuerst die Erweiterung installieren. Nach Abschluss der Installation können wir über den folgenden Code eine Verbindung zum Redis -Server herstellen:

 
$redis = new Redis();
$redis->connect('localhost', 6379);
  

Hier erstellen wir eine Redis -Instanz und stellen eine Verbindung zum lokalen Redis -Server her. Wenn sich der Redis -Server an einer anderen Adresse befindet, können Sie die Parameter der `Connect ()` -Methode ändern, um die IP -Adresse des Servers anzugeben.

Abonnieren Sie Redis Message Queuing

Verwenden Sie nach der Verbindung zu Redis die Methode `subscribe ()`, um einen Kanal zu abonnieren. Diese Methode nimmt ein Array als Parameter mit, der den Kanalnamen enthält. Zum Beispiel können wir einen Kanal namens "Mychannel" abonnieren:

 
$redis->subscribe(['mychannel'], 'callback');
  

In diesem Code abonnieren wir einen Kanal namens "Mychannel" und geben eine Rückruffunktion `callback an. Wenn Redis eine Nachricht an den Kanal sendet, führt das PHP -Programm automatisch die Rückruffunktion aus, um die Nachricht zu verarbeiten.

Verarbeiten Sie abonnierte Nachrichten

Nach dem Empfangen der Nachricht müssen wir die Verarbeitungslogik in der Rückruffunktion schreiben. Diese Rückruffunktion wird ausgelöst, wenn eine Nachricht empfangen wird, und empfängt automatisch den von Redis gesendeten Kanal- und Nachrichteninhalt.

 
function callback($redis, $channel, $message) {
  echo "Received message: $message\n";
}
  

In diesem Beispiel erhält die Rückruffunktion drei Parameter: "$ redis" ist die Redis -Instanz, "$ Channel" der Kanalname und "$ message" der Nachrichteninhalt. Wenn eine neue Nachricht empfangen wird, gibt die Funktion den Nachrichteninhalt aus.

Vollständiger Beispielcode

Hier finden Sie einen vollständigen Beispielcode, der zeigt, wie Sie mithilfe von PHP kontinuierlich auf Redis -Nachrichten anhören und Warteschlangenaufgaben umgehen können:

 
$redis = new Redis();
$redis->connect('localhost', 6379);
$redis->subscribe(['mychannel'], 'callback');

function callback($redis, $channel, $message) {
  $data = json_decode($message, true);
  processTask($data);
}

function processTask($data) {
  if ($data['task'] == 'send_email') {
    sendEmail($data['to'], $data['subject'], $data['content']);
  } elseif ($data['task'] == 'update_statistics') {
    updateStatistics();
  }
}

function sendEmail($to, $subject, $content) {
  // E -Mail -Code senden
}

function updateStatistics() {
  // Statistikcode aktualisieren
}
  

In diesem vollständigen Beispiel endet das PHP -Programm für einen Kanal namens "Mychannel" und ruft die entsprechende Verarbeitungsfunktion auf, wenn sie eine Meldung vom Typ Task -Typ erhalten. Wenn die Aufgabe beispielsweise "send_email" lautet, wird die Funktion "sendemail ()" zum Senden von E -Mails aufgerufen. Wenn die Aufgabe "updat_statistics" lautet, wird die Funktion "Updatestatistics ()" aufgerufen, Statistiken zu aktualisieren.

Zusammenfassen

Durch kontinuierliches Anhören von Redis -Nachrichtenabonnements mit PHP können Sie eine asynchrone Verarbeitung von Warteschlangenaufgaben implementieren, wodurch die Systemleistung erheblich verbessert wird. In praktischen Anwendungen können zeitaufwändige Aufgaben in Nachrichtenwarteschlangen für die Verarbeitung und Verwendung von PHP zum Anhören dieser Warteschlangen die Systemlast effektiv reduzieren und die gleichzeitigen Verarbeitungsfunktionen verbessern. Gleichzeitig eignet sich diese Methode auch für Echtzeit-Anwendungsszenarien wie Echtzeit-Push- und Online-Chat-Räume.