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:
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
)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.
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-VerbindungsereignisAlle 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!