Heim >Datenbank >Redis >12 wichtige Punkte, die in Redis-Interviews häufig gefragt werden (mit Antworten)

12 wichtige Punkte, die in Redis-Interviews häufig gefragt werden (mit Antworten)

WBOY
WBOYnach vorne
2022-02-14 10:51:158645Durchsuche

Dieser Artikel bietet Ihnen eine Zusammenfassung einiger Fragen, die häufig in Vorstellungsgesprächen zu Redis gestellt werden. Er simuliert, wie der Interviewer Schritt für Schritt ausführlich auf das Thema Redis eingeht, und untersucht umfassend, wie gut der Kandidat Redis beherrscht um es besser zu verstehen.

12 wichtige Punkte, die in Redis-Interviews häufig gefragt werden (mit Antworten)

Empfohlene Studie: „2022 neueste Fragen und Antworten zu Redis-Interviews

12 wichtige Punkte, die häufig in Redis-Interviews gestellt werden

Redis ist eine Schwelle, die im Interview nicht umgangen werden kann, solange es geschrieben wird im Lebenslauf Wenn Sie Redis verwendet haben, werden Sie definitiv nicht daran vorbeikommen.

Xiao Zhang:

Hallo, Interviewer. Ich bin hier für ein Interview.

Interviewer:

Hallo, Xiao Zhang. Ich habe Ihren Lebenslauf gelesen und beherrsche Redis, daher werde ich Ihnen nur ein paar Redis-bezogene Fragen stellen. Zunächst einmal lautet meine Frage: Ist Redis Single-Threaded oder Multi-Threaded?

Xiao Zhang:

Die in verschiedenen Versionen von Redis verwendeten Threading-Modelle sind unterschiedlich. Vor Redis Version 4.0 wurde ein Single-Thread-Modell verwendet, und nach Version 4.0 wurde Multi-Threading-Unterstützung hinzugefügt.

Obwohl wir vor 4.0 sagten, dass Redis Single-Threaded ist, bedeutete dies nur, dass sein Netzwerk-E/A-Thread sowie die Set- und Get-Vorgänge von einem Thread abgeschlossen wurden. Die Redis-Persistenz und die Clustersynchronisierung werden jedoch weiterhin mithilfe anderer Threads durchgeführt.

Multithreading-Unterstützung wurde nach 4.0 hinzugefügt, was sich hauptsächlich in der asynchronen Löschfunktion von Big Data wie unlink keyflushdb asyncflushall async usw. widerspiegelt.

Interviewer:

Die Antwort ist sehr gut: Warum hat sich Redis dann früher für die Verwendung eines einzelnen Threads entschieden? 4,0? Und ist es mit Single Thread so schnell?

Xiao Zhang:

Ich persönlich denke, dass die Wahl eines einzelnen Threads hauptsächlich darauf zurückzuführen ist, dass er einfach zu verwenden ist, keine Sperrenkonkurrenz besteht, alle Vorgänge ohne Sperren ausgeführt werden können und es keinen Leistungs- und Zeitaufwand durch Deadlocks gibt Thread-Umschaltung, aber gleichzeitig kann ein einzelner Thread die Leistung einer Multi-Core-CPU nicht voll ausschöpfen.

Was die Geschwindigkeit eines einzelnen Threads angeht, gibt es meiner Meinung nach hauptsächlich die folgenden Gründe:

  • Die Ausführungseffizienz im Speicher ist sehr schnell und verwendet effiziente Datenstrukturen Tabellen und Skip-Tabellen.

  • Die Verwendung eines einzelnen Threads vermeidet Multi-Thread-Konkurrenz, spart Zeit und Leistungsaufwand durch Multi-Thread-Switching und verursacht keinen Deadlock.

  • Verwendet den E/A-Multiplexmechanismus, um eine große Anzahl von Client-Socket-Anfragen zu verarbeiten, da er auf einem nicht blockierenden E/A-Modell basiert, das es Redis ermöglicht, Netzwerkkommunikation sowie E/A-Lese- und Schreibprozesse effizient durchzuführen Kein Blockieren mehr.

Interviewer:

Gut, Wie erreicht Redis keinen Datenverlust?

Xiao Zhang:

Redis-Daten werden im Speicher gespeichert. Um sicherzustellen, dass die Redis-Daten nicht verloren gehen, müssen die Daten aus dem Speicher auf der Festplatte gespeichert werden, damit die Originaldaten von der Festplatte wiederhergestellt werden können Nach dem Neustart des Servers ist dies die Datenpersistenz von Redis. Es gibt drei Möglichkeiten, Redis-Daten beizubehalten.

  • AOF-Protokoll (Nur Datei anhängen): Zeichnen Sie alle Betriebsbefehle auf und hängen Sie sie in Textform an die Datei an.

  • RDB Snapshot (Redis DataBase): Schreiben Sie die Speicherdaten zu einem bestimmten Zeitpunkt in binärer Form auf die Festplatte.

  • Hybride Persistenzmethode: Redis 4.0 fügt eine neue hybride Persistenzmethode hinzu, die die Vorteile von RDB und AOF integriert.

Interviewer:

Dann sprechen Sie bitte über die Implementierungsprinzipien von AOF bzw. RDB.

Xiao Zhang:

AOF verwendet die Post-Write-Protokollierung, führt zuerst den Befehl aus, um die Daten in den Speicher zu schreiben, und zeichnet dann das Protokoll in der Datei auf. Das AOF-Protokoll zeichnet Betriebsbefehle auf, keine tatsächlichen Daten. Wenn die AOF-Methode zur Fehlerbehebung verwendet wird, muss das gesamte Protokoll ausgeführt werden.

12 wichtige Punkte, die in Redis-Interviews häufig gefragt werden (mit Antworten)

RDB verwendet eine Speicher-Snapshot-Methode. Sie zeichnet Daten zu einem bestimmten Zeitpunkt auf, keine Vorgänge. Daher müssen Sie bei Verwendung der RDB-Methode zur Fehlerwiederherstellung nur die RDB-Datei direkt in den Speicher einlesen, um eine schnelle Wiederherstellung zu erreichen .

Interviewer:

Sie haben gerade erwähnt, dass AOF eine „Post-Write-Log“-Methode verwendet, während das von uns normalerweise verwendete MySQL eine „Pre-Write-Log“-Methode verwendet. Warum muss Redis also zuerst den Befehl ausführen? Daten schreiben? Was ist mit dem Schreiben in das Protokoll?

Xiao Zhang: Ich habe angefangen, auf meiner Stirn zu schwitzen. Welche Fragen hast du gestellt? . .

Nun, das liegt hauptsächlich daran, dass Redis vor dem Schreiben des Protokolls keine Syntaxprüfung für Befehle durchführt, sodass nur erfolgreich ausgeführte Befehle aufgezeichnet werden, um die Aufzeichnung falscher Befehle zu vermeiden, und das Schreiben von Protokollen nach der Ausführung des Befehls den aktuellen Schreibvorgang nicht blockiert.

Interviewer:

Was sind dann die Risiken, nach ein Tagebuch zu schreiben?

Xiao Zhang:

Ich...ich weiß nicht, wie ich das machen soll.

Interviewer:

Nun, es gibt zwei Hauptrisiken, die beim Schreiben von Protokollen auftreten können:

  • Daten können verloren gehen: Wenn Redis gerade die Ausführung des Befehls abgeschlossen hat und zu diesem Zeitpunkt ein Fehler auftritt, wird dieser Befehl ausgeführt. Es besteht die Gefahr eines Verlustes.

  • Kann andere Vorgänge blockieren: Das AOF-Protokoll wird tatsächlich im Hauptthread ausgeführt. Wenn Redis also die Protokolldatei auf die Festplatte schreibt, blockiert es weiterhin nachfolgende Vorgänge und kann nicht ausgeführt werden.

Ich habe noch eine Frage: Wird RDB Threads blockieren, wenn Snapshots erstellt werden?

Xiao Zhang:

Redis bietet zwei Befehle zum Generieren von RDB-Snapshot-Dateien, nämlich save und bgsave. Der Speicherbefehl wird im Hauptthread ausgeführt und führt zu einer Blockierung. Der Befehl bgsave erstellt einen untergeordneten Prozess zum Schreiben von RDB-Dateien und vermeidet so das Blockieren des Hauptthreads. Dies ist auch die Standardkonfiguration von Redis RDB.

Interviewer:

RDB Können die Daten beim Aufnehmen eines Schnappschusses geändert werden?

Xiao Zhang:

save ist synchron und blockiert Client-Befehle, kann aber während bgsave geändert werden.

Interviewer:

Dann Wie löst Redis das Problem, Datenänderungen zuzulassen, wenn bgsave einen Snapshot erstellt?

Xiao Zhang: (Warum fragst du immer noch ... Ich weiß nicht wie!)

Ähm, da bin ich mir nicht sicher ...

Interviewer:

Hier verwenden wir hauptsächlich bgsave Durch den Unter-Thread von Code> implementiert, sind die spezifischen Vorgänge wie folgt: <code>bgsave的子线程实现的,具体操作如下:

如果主线程执行读操作,则主线程和 bgsave 子进程互相不影响;

如果主线程执行写操作,则被修改的数据会复制一份副本,然后 bgsave

Wenn der Haupt-Thread eine Leseoperation ausführt, führen der Haupt-Thread und der Unterprozess bgsave dies nicht aus sich gegenseitig beeinflussen;

12 wichtige Punkte, die in Redis-Interviews häufig gefragt werden (mit Antworten)Wenn der Hauptthread einen Schreibvorgang ausführt, wird eine Kopie der geänderten Daten erstellt, und dann schreibt der Unterprozess bgsave die kopierten Daten in die RDB Während dieses Vorgangs kann der Hauptthread die Originaldaten weiterhin direkt ändern.

Es ist zu beachten, dass die Ausführungshäufigkeit von Redis auf RDB sehr wichtig ist, da dies die Integrität der Snapshot-Daten und die Stabilität von Redis beeinträchtigt. Daher wird nach Redis 4.0 ein Datenpersistenzmechanismus von

AOF und RDB eingeführt Hybrid wurde hinzugefügt

: Schreiben Sie die Daten in Form von RDB in die Datei und speichern Sie dann die nachfolgenden Betriebsbefehle in der Datei im AOF-Format, was nicht nur die Neustartgeschwindigkeit von Redis gewährleistet, sondern auch das Datenrisiko verringert Verlust.

Xiao Zhang:

Ich habe gelernt, ich habe gelernt.

Interviewer:

Können Sie mir dann sagen, wie Redis eine hohe Verfügbarkeit erreicht?

Xiao Zhang:

Es gibt drei Hauptmethoden, um eine hohe Verfügbarkeit in Redis zu erreichen: Master-Slave-Replikation, Sentinel-Modus und Redis-Cluster.

Master-Slave-Replikation

12 wichtige Punkte, die in Redis-Interviews häufig gefragt werden (mit Antworten)Synchronisieren Sie Daten von einem früheren Redis-Server mit mehreren Slave-Redis-Servern, also einem Master-Slave-Modell. Dies ist das gleiche Prinzip wie die MySQL-Master-Slave-Replikation.

Sentinel-Modus

12 wichtige Punkte, die in Redis-Interviews häufig gefragt werden (mit Antworten)Bei Verwendung des Redis-Master-Slave-Dienstes tritt ein Problem auf, das heißt, wenn der Redis-Master-Slave-Server ausfällt und ausfällt, muss er manuell wiederhergestellt werden Um dieses Problem zu lösen, hat Redis den Sentry-Modus hinzugefügt (da der Sentinel-Modus die Master- und Slave-Server überwachen und automatische Notfallwiederherstellungsfunktionen bereitstellen kann).

Redis-Cluster (Cluster)

12 wichtige Punkte, die in Redis-Interviews häufig gefragt werden (mit Antworten)Redis-Cluster ist eine in Redis 3.0 eingeführte Redis-Cluster-Lösung. Dadurch wird die Abhängigkeit des Systems von einem reduziert einzelnen Masterknoten, wodurch die Lese- und Schreibleistung des Redis-Dienstes verbessert wird.

Interviewer:

Im Sentinel-Modus gibt es eine Kopie der Daten, um die Daten sicherzustellen, und es gibt eine Sentinel-Überwachung der Verfügbarkeit. Sobald der Master-Knoten ausfällt, wird der Slave-Knoten zum Master-Knoten gewählt . Das hat unsere Produktionsumgebung zufrieden gestellt. Ja,

Warum müssen Sie also immer noch den Cluster-Modus verwenden?

Xiao Zhang:

Nun, der Sentinel-Modus ist immer noch ein Master-Slave-Knoten. Im Master-Slave-Modus können wir die Lese-Parallelitätsfähigkeit durch Hinzufügen von Salve-Knoten erweitern, aber es gibt keine Möglichkeit, die Schreibfähigkeit zu erweitern und Speicherkapazität Die Speicherkapazität kann nur die Obergrenze sein, die der Masterknoten tragen kann. Um die Schreib- und Speicherfunktionen zu erweitern, müssen wir daher den Cluster-Modus einführen.

Interviewer:

Es gibt so viele Master-Knoten im Cluster. Wie bestimmt der Redis-Cluster, welcher Knoten beim Speichern ausgewählt werden soll?

Xiao Zhang:

Hier sollte eine Art Hash-Algorithmus verwendet werden, aber ich bin mir nicht sicher. . . 🎜🎜Interviewer:🎜

Okay, das war's für das heutige Interview. Du gehst zurück und wartest auf unsere Interviewbenachrichtigung.

Xiao Zhang:

Okay, danke Interviewer, können Sie mir sagen, wie der Redis-Cluster die Knotenauswahl implementiert?

Interviewer:

Redis Cluster verwendet einen konsistenten Hashing-Algorithmus zur Implementierung der Knotenauswahl Was ein konsistenter Hashing-Algorithmus ist, können Sie noch einmal selbst sehen.

Redis-Cluster unterteilt sich in 16384 Slots. Jedes Schlüssel-Wert-Paar wird entsprechend seinem Schlüssel in zwei Schritte unterteilt.

  • Berechnen Sie einen 16-Bit-Wert basierend auf dem Schlüssel des Schlüssel-Wert-Paares gemäß dem CRC16-Algorithmus.

  • Verwenden Sie dann den 16-Bit-Wert, um 16384 zu modulieren, um einen Modul im Bereich von 0 bis 16383 zu erhalten. Jeder Modul stellt einen Hash-Slot mit einer entsprechenden Zahl dar.

Jeder Redis-Knoten ist für die Verarbeitung eines Teils der Slots verantwortlich. Wenn Sie drei Masterknoten ABC hinzufügen, sind die Slots, für die jeder Knoten verantwortlich ist, wie folgt:

12 wichtige Punkte, die in Redis-Interviews häufig gefragt werden (mit Antworten)

Auf diese Weise erfolgt die Auswahl der Clusterknoten realisiert.

Empfohlenes Lernen: „Redis-Video-Tutorial“, „2022 neueste Fragen und Antworten zu Redis-Interviews

Das obige ist der detaillierte Inhalt von12 wichtige Punkte, die in Redis-Interviews häufig gefragt werden (mit Antworten). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:公众号苏三说技术. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen