Redis verwendet eine speicherbasierte KV-Datenbank, die ein Single-Process-Single-Thread-Modell verwendet und in der Sprache C geschrieben ist. Die offiziellen Daten besagen, dass es 100.000+ qps erreichen kann. Diese Daten sind nicht schlechter als Memcached, dieselbe speicherbasierte KV-Datenbank, die Einzelprozess und Multithreading verwendet.
Die Hauptgründe, warum Redis schnell ist, sind:
Komplett speicherbasiert
2 sind auch einfach
3. Verwenden Sie ein Mehrkanal-I/O-Multiplexing-Modell
Ich werde nicht näher auf den ersten und zweiten Punkt eingehen, sondern mich hauptsächlich auf den dritten Punkt konzentrieren, indem Kanal-I/O-Multiplexing-Technologie.
Das Mehrkanal-E/A-Multiplex-Modell verwendet Select, Poll und Epoll, um die E/A-Ereignisse mehrerer Streams gleichzeitig zu überwachen. Im Leerlauf wird der aktuelle Thread blockiert a Wenn in mehreren Streams E/A-Ereignisse vorhanden sind, werden diese aus dem Blockierungszustand aktiviert, sodass das Programm alle Streams abfragt (epoll fragt nur die Streams ab, die tatsächlich Ereignisse ausgegeben haben) und diese nur nacheinander verarbeitet. Dieser Ansatz vermeidet viele nutzlose Operationen. Hier bezieht sich „mehrfach“ auf mehrere Netzwerkverbindungen und „Wiederverwendung“ auf die Wiederverwendung desselben Threads. Durch die Verwendung der Mehrkanal-E/A-Multiplexing-Technologie kann ein einzelner Thread mehrere Verbindungsanforderungen effizient verarbeiten (wodurch der Zeitaufwand für Netzwerk-E/A minimiert wird), und Redis verarbeitet Daten im Speicher sehr schnell (In-Memory-Vorgänge werden hier kein Problem darstellen). ). Leistungsengpass), die beiden oben genannten Punkte tragen hauptsächlich zum hohen Durchsatz von Redis bei.
Im Gegensatz zu Memcached verwendet Redis Libevent nicht direkt, sondern führt eine sehr schlanke Implementierung gängiger Schnittstellen wie select, epoll, evport und kqueue durch. Wählen Sie die entsprechende Schnittstelle für verschiedene Systemaufrufe. Die Standardeinstellung unter Linux ist epoll. Da Libevent relativ umfangreich und universell einsetzbar ist, ist die Codemenge sehr groß und es verfügt über viele Funktionen, die Redis nicht nutzen kann. Um „Leichtigkeit“ zu erreichen und Abhängigkeiten zu beseitigen, hat sich Redis dafür entschieden, es selbst zu kapseln.
Vorteile eines einzelnen Prozesses und eines einzelnen Threads
1 Der Code ist klarer und die Verarbeitungslogik ist einfacher.
2. Es besteht keine Notwendigkeit, verschiedene Sperrprobleme zu berücksichtigen. Es gibt keine Sperr- und Freigabevorgänge und es gibt keinen Leistungsverbrauch durch mögliche Deadlocks.
3. Es gibt keinen CPU-Verbrauch aufgrund von Umschaltungen durch Multiprozess oder Multithread.
Das obige ist der detaillierte Inhalt vonWarum ist Redis so schnell?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!