Heim  >  Artikel  >  Datenbank  >  Analyse des Redis-Ereignisverarbeitungsprozesses

Analyse des Redis-Ereignisverarbeitungsprozesses

王林
王林nach vorne
2021-02-19 09:18:211782Durchsuche

Analyse des Redis-Ereignisverarbeitungsprozesses

Vorwort:

Wir wissen, dass der Redis-Server ein ereignisgesteuertes Programm ist, das zwei Arten von Ereignissen verarbeiten muss, nämlich Dateiereignisse und Zeitereignisse.

Wie sieht also der Redis-Ereignisverarbeitungsprozess aus? Schauen wir uns das Bild unten an:

Analyse des Redis-Ereignisverarbeitungsprozesses

Die aeMain-Funktion plant und führt Dateiereignisse und Zeitereignisse aus, indem sie die aeProcessEvents-Funktion aufruft. Ereignisbezogene Informationen werden in aeEventLoop aufgezeichnet. Rufen Sie zunächst das Ausführungszeitintervall n des kürzesten Zeitereignisses über die Funktion aeSearchNearestTimer ab, rufen Sie dann die Funktion aeApiPoll auf, um den überwachten Socket abzurufen, führen Sie schließlich die dem Socket entsprechenden Ereignisverarbeitungsfunktionen rfileProc und wfileProc aus und führen Sie schließlich das Zeitereignis aus Funktion ProcessTimeEvents

Dateiereignisse

Redis hat einen eigenen Netzwerkereignisprozessor basierend auf dem Reactor-Modell entwickelt. Dieser Prozessor wird als Dateiereignishandler (Dateiereignishandler) bezeichnet:

  • Der Dateiereignishandler verwendet IO-Multiplexing. Das Programm überwacht mehrere Sockets und ordnet den Sockets verschiedene Event-Handler entsprechend den aktuell von den Sockets ausgeführten Aufgaben zu. und andere Vorgänge: Wenn ein Dateiereignis auftritt, rufen diese Dateiereignishandler den zuvor dem Socket zugeordneten Ereignishandler auf, um das Ereignis zu verarbeiten

    )
  • Prozessor für Dateiereignisse

Redis hat mehrere Prozessoren für Dateiereignisse geschrieben:

Verbindungsantwortprozessor: Wenn der Redis-Server initialisiert wird, ordnet das Programm den Verbindungsantwortprozessor dem AE_READABLE-Ereignis zu Wenn ein Client die Verbindungsfunktion verwendet, um eine Verbindung zum Server-Listening-Socket herzustellen, generiert der Socket ein AE_READABLE-Ereignis und löst den entsprechenden Socket-Antwortvorgang aus.

Analyse des Redis-Ereignisverarbeitungsprozesses

Befehlsanforderungsprozessor: Wenn ein Client über den Verbindungsantwortprozessor erfolgreich eine Verbindung zum Server herstellt, sendet der Server das AE_READABLE-Ereignis des Client-Sockets. Wenn der Client mit dem Befehlsanforderungsprozessor verknüpft ist und eine Befehlsanforderung an den Server sendet, generiert der Socket ein AE_READABLE-Ereignis , wodurch der Befehlsanforderungsprozessor den entsprechenden Socket-Lesevorgang ausführt und ausführt Wenn der Client bereit ist, die vom Server zurückgesendete Befehlsantwort zu empfangen, wird das Ereignis AE_WRITABLE generiert, das die Ausführung des Befehlsantwortprozessors auslöst und den entsprechenden Socket-Schreibvorgang ausführt

A Vollständiges Client-Server-Verbindungsereignis
  • Der Server lauscht auf das AE_READABLE-Ereignis des Suite-Worts. Wenn der Client eine Verbindungsanforderung sendet, um ein AE_READABLE-Ereignis zu generieren, antwortet der Server auf die Verbindungsanforderung des Clients und ordnet AE_READABLE zu Ereignis des Client-Sockets mit dem Befehlsanforderungsprozessor. Der Client kann eine Befehlsanforderung an den Server senden. Der Client sendet eine Befehlsanforderung an den Server. Der Client-Socket generiert ein AE_READABLE-Ereignis, das den Befehlsprozessor auslöst Durch die Ausführung des Befehls wird eine entsprechende Befehlsantwort generiert. Der Server verarbeitet das AE_WRITABLE-Ereignis des Client-Sockets und die Befehlsantwort. Wenn der Client versucht, die Befehlsantwort zu lesen, generiert der Client-Socket ein AE_WRITABLE-Ereignis, das die Ausführung auslöst des Befehlsantwortprozessors. Wenn der Befehlsantwortprozessor alle Befehlsantworten in den Socket schreibt, ist die Zuordnung zwischen dem AE_WRITABLE-Ereignis des Client-Sockets und dem Befehlsantwortprozessor
  • Zeitereignisse
  • Die Zeitereignisse von Redis unterteilt in geplante Ereignisse und periodische Ereignisse. Ein Zeitereignis besteht aus drei Attributen:

    id: eine weltweit eindeutige ID, die vom Server für die Zeit und den Zeitpunkt erstellt wird, an dem: die Ankunftszeit der Zeit und der Uhrzeit aufgezeichnet wird (UNIX-Zeitstempel mit Millisekundengenauigkeit) timeProc: Zeitereignisprozessor

Alle Zeitereignisse des Servers werden in einer ungeordneten verknüpften Liste platziert. Immer wenn der Zeitereignis-Executor ausgeführt wird, durchläuft er die gesamte verknüpfte Liste, findet alle ankommenden Zeitereignisse und ruft den entsprechenden Ereignishandler auf. Der Redis-Server verwendet im Normalmodus nur ein Zeitereignis, serverCron, und im Benchmark-Modus verwendet der Server nur zwei Zeitereignisse, sodass die Leistung der Ereignisausführung nicht beeinträchtigt wird.

Verwandte Empfehlungen: Redis-Datenbank-Tutorial

Das obige ist der detaillierte Inhalt vonAnalyse des Redis-Ereignisverarbeitungsprozesses. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen