Heim  >  Artikel  >  Datenbank  >  Fassen Sie einige Interviewfragen zum Redis-Cache zusammen und teilen Sie sie

Fassen Sie einige Interviewfragen zum Redis-Cache zusammen und teilen Sie sie

青灯夜游
青灯夜游nach vorne
2021-05-07 10:43:263027Durchsuche

In diesem Artikel werden einige Interviewfragen zum Redis-Caching mit Ihnen geteilt. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Fassen Sie einige Interviewfragen zum Redis-Cache zusammen und teilen Sie sie

Redis-Cache-Interviewfragen

1 Was ist der Unterschied zwischen Redis und Memcached? Warum ist Single-Threaded-Redis bei hoher Parallelität manchmal effizienter als Multithread-Memcached?

Unterschied:

  • memcached kann Bilder und Videos zwischenspeichern. Redis unterstützt neben k/v noch weitere Datenstrukturen; .

  • Grund: Das Memcached-Multithreading-Modell führt zu Cache-Konsistenz und Sperren, und Sperren führen zu Leistungseinbußen.

  • 2. Wie wird die Redis-Master-Slave-Replikation implementiert? Wie implementiert man den Redis-Cluster-Modus? Wie wird der Schlüssel von Redis angesprochen?

Master-Slave-Replikationsimplementierung: Der Masterknoten erstellt einen Snapshot der Daten in seinem eigenen Speicher, sendet den Snapshot an den Slave-Knoten und der Slave-Knoten stellt die Daten im Speicher wieder her. Danach sendet der Master-Knoten jedes Mal, wenn neue Daten hinzugefügt werden, die Anweisung in einem binären Protokollformat ähnlich wie MySQL an den Slave-Knoten, und der Slave-Knoten erhält die vom Master-Knoten gesendete Anweisung zur Wiedergabe. +

Redis-Cluster-Körper Bietet die Möglichkeit, Daten automatisch auf verschiedene Knoten von RedisCluster zu verteilen. Auf welchem ​​Knoten eine bestimmte Datenteilmenge der gesamten Datensammlung gespeichert ist, ist für den Benutzer transparent)

Redis-Cluster-Sharding-Prinzip: Dort ist ein 16384 im Cluster. Die Länge des Steckplatzes (virtueller Steckplatz) ist mit 0-16383 nummeriert. Jeder Master-Knoten ist für einen Teil der Slots verantwortlich. Wenn ein bestimmter Schlüssel einem Slot zugeordnet ist, für den ein Master verantwortlich ist, ist der Master für die Bereitstellung von Diensten für diesen Schlüssel verantwortlich Der Steckplatz kann vom Benutzer angegeben werden oder er wird während der Initialisierung automatisch generiert und nur der Master ist Eigentümer des Steckplatzes. Der Master-Knoten verwaltet eine 16384/8-Byte-Bitsequenz. Der Master-Knoten verwendet Bits, um zu identifizieren, ob er einen bestimmten Steckplatz besitzt. Für den Steckplatz mit der Nummer 1 muss der Master beispielsweise nur bestimmen, ob das zweite Bit der Sequenz (Index beginnend bei 0) 1 ist. Diese Struktur erleichtert das Hinzufügen oder Entfernen von Knoten. Wenn ich beispielsweise einen neuen Knoten D hinzufügen möchte, muss ich einige Slots von den Knoten A, B und C nach D erhalten.

[Verwandte Empfehlungen:

Redis-Video-Tutorial

]
  • 3 Wie entwerfe ich verteilte Sperren mit Redis? Erzählen Sie mir von der Umsetzungsidee? Ist es möglich, zk zu verwenden? Wie erreichen? Was ist der Unterschied zwischen diesen beiden?

  • redis:

  • Thread Asetnx (Zeitstempel tl, wenn das gesperrte Objekt abläuft), wenn true zurückgegeben wird, wird die Sperre erhalten.

  • Thread B verwendet get, um t1 abzurufen, vergleicht es mit dem aktuellen Zeitstempel und stellt fest, ob es eine Zeitüberschreitung gibt. Wenn nicht, fahren Sie mit Schritt 3 fort Neue Timeout-Zeit t2, und verwenden Sie den Befehl getset, um t3 zurückzugeben (Dieser Wert wurde möglicherweise von anderen Threads geändert. Wenn t1 == t3, wird die Sperre von anderen Threads erworben.)

  • Verarbeiten Sie nach dem Erwerb der Sperre die Geschäftslogik und stellen Sie dann fest, ob die Sperre abgelaufen ist. Wenn die Sperre nicht abgelaufen ist, müssen Sie sie nicht verarbeiten verhindert das Löschen der Sperren anderer Threads).

  • zk:

  • Wenn der Client eine Methode sperrt, wird im Verzeichnis des angegebenen Knotens, der der Methode auf zk entspricht, ein eindeutiger, sofort geordneter Knoten generiert.

client Der Client erhält alle untergeordneten Elemente Wenn festgestellt wird, dass die Seriennummer des von ihm selbst erstellten Knotens 1 am kleinsten ist, wird davon ausgegangen, dass der Client die Sperre erhalten hat.

Wenn festgestellt wird, dass Knoten1 nicht der kleinste ist, hört er auf den größten Knoten mit einer kleineren Seriennummer als der von ihm erstellte Knoten und wartet.

Beenden Sie nach dem Erwerb der Sperre die Verarbeitung der Logik und löschen Sie den von Ihnen erstellten Knoten1. Unterschied: Die Leistung von zk ist schlechter, der Overhead ist hoch und die Implementierung ist einfach.

  • 4. Kennen Sie die Beständigkeit von Redis? Wie wird die unterste Ebene implementiert? Was sind die Vor- und Nachteile?

  • RDB (RedisDataBase: Synchronisiert von Redis-Daten generierte Snapshots zu unterschiedlichen Zeitpunkten mit Festplatten und anderen Medien): Snapshots vom Speicher auf die Festplatte, regelmäßig aktualisiert. Nachteile: zeitaufwändig, leistungsintensiv (Fork + Io-Vorgänge), leicht verlorene Daten.

    AOF (AppendOnlyFile: Alle von Redis ausgeführten Anweisungen aufzeichnen. Beim nächsten Neustart von Redis müssen Sie nur die Anweisungen ausführen): Protokolle schreiben. Nachteile: Große Größe, langsame Wiederherstellungsgeschwindigkeit.
  • bgsave sorgt für die vollständige Bildpersistenz und aof für die inkrementelle Persistenz. Da bgsave lange dauert und nicht in Echtzeit erfolgt, kommt es beim Herunterfahren zu großem Datenverlust. Beim Neustart der Redis-Instanz wird zuerst aof verwendet Da kein AOF-Protokoll vorhanden ist, wird die RDB-Datei zum Wiederherstellen verwendet. Redis schreibt AOF regelmäßig neu und komprimiert die Protokollgröße der AOF-Datei. Nach Redis 4.0 gibt es eine hybride Persistenzfunktion, die die volle Menge an bgsave und das Inkrement von aof integriert, was nicht nur die Effizienz der Wiederherstellung gewährleistet, sondern auch die Sicherheit der Daten berücksichtigt. Das Prinzip von bgsave, fork und cow, fork bedeutet, dass Redis den BGSave-Vorgang durch Erstellen eines untergeordneten Prozesses durchführt, und cow bedeutet, dass nach der Erstellung des untergeordneten Prozesses der übergeordnete und der untergeordnete Prozess das Datensegment gemeinsam nutzen und der übergeordnete Prozess damit fortfährt Bereitstellung von Lese- und Schreibdiensten und Schreiben schmutziger Seiten. Die Daten werden nach und nach vom untergeordneten Prozess getrennt.

    5. Was sind die Ablaufstrategien von Redis? Kennen Sie den LRU-Algorithmus? Etwas Java-Code schreiben, um es zu implementieren?

    Ablaufstrategie:

    Zeitgesteuerter Ablauf (ein Schlüssel, ein Timer), verzögerter Ablauf: Nur wenn der Schlüssel verwendet wird, wird beurteilt, ob der Schlüssel abgelaufen ist, und er wird gelöscht, wenn er abläuft. Periodischer Ablauf: ein Kompromiss zwischen den ersten beiden.

    LRU: newLinkedHashMap(capacity,DEFAULT_LOAD_FACTORY,true); Der dritte Parameter ist auf true gesetzt, was bedeutet, dass die verknüpfte Liste in der Zugriffsreihenfolge sortiert ist und als LRU-Cache verwendet werden kann. Dies bedeutet, dass die verknüpfte Liste in der Einfügungsreihenfolge sortiert ist und als FIFO-Cache verwendet werden kann.

    LRU-Algorithmus-Implementierung:

    • wird durch eine bidirektionale verknüpfte Liste implementiert und neue Daten werden in den Kopf der verknüpften Liste eingefügt Liste;

    • Immer wenn der Cache erreicht wird (d. h. auf die zwischengespeicherten Daten wird zugegriffen), werden die Daten an den Kopf der verknüpften Liste verschoben.

    • Wenn die verknüpfte Liste voll ist, werden die Daten am Ende verworfen der verknüpften Liste.

    LinkedHashMap: Die Kombination aus HashMap und doppelt verknüpfter Liste ist LinkedHashMap. HashMap ist ungeordnet und LinkedHashMap stellt die Iterationsreihenfolge sicher, indem es eine zusätzliche doppelt verknüpfte Liste verwaltet. Die Iterationsreihenfolge kann eine Einfügungsreihenfolge (Standard) oder eine Zugriffsreihenfolge sein.

    6. Cache-Penetration, Cache-Aufschlüsselung, Cache-Lawinen-Lösung?

    ** Cache-Penetration: ** bezieht sich auf die Abfrage von Daten, die nicht vorhanden sein dürfen. Wenn die Daten nicht auf der Speicherebene gefunden werden können, werden sie nicht in den Cache geschrieben Wird bei jeder Anforderung an die Datenbank gesendet. Die Abfrage kann dazu führen, dass die Datenbank hängen bleibt.

    Lösung:

    • Die von der Abfrage zurückgegebenen Daten sind leer. Dieses leere Ergebnis wird immer noch zwischengespeichert, aber die Ablaufzeit ist kürzer.

    • Bloom-Filter: Hashen Sie alle möglichen Daten in einer Bitmap Wenn die Bitmap groß genug ist, werden Daten, die nicht vorhanden sein dürfen, von dieser Bitmap abgefangen, wodurch DB-Abfragen vermieden werden.

    ** Cache-Aufschlüsselung: ** Wenn bei einem Schlüssel mit festgelegter Ablaufzeit der Cache zu einem bestimmten Zeitpunkt abläuft, gibt es zu diesem Zeitpunkt zufällig eine große Anzahl gleichzeitiger Anforderungen für diesen Schlüssel. Diese Anforderungen stellen im Allgemeinen fest, dass der Cache abgelaufen ist. Daten werden aus der Backend-Datenbank geladen und im Cache wiederhergestellt. Zu diesem Zeitpunkt können große gleichzeitige Anforderungen die Datenbank sofort überlasten.

    Lösung:

    • Mutex-Sperre verwenden: Wenn der Cache fehlschlägt, gehen Sie nicht sofort zu Ioaddb, z. B. Redis, um eine Mutex-Sperre festzulegen. Wenn der Vorgang erfolgreich ist, führen Sie den Ioaddb-Vorgang aus und legen Sie ihn fest Zurück. Andernfalls versuchen Sie es erneut mit der Get-Cache-Methode.

    • Läuft nie ab: Physisch läuft nicht ab, aber Logik läuft ab (asynchrone Thread-Aktualisierungen im Hintergrund). Cache-Lawine: Beim Festlegen des Caches wird dieselbe Ablaufzeit verwendet, wodurch der Cache zu einem bestimmten Zeitpunkt gleichzeitig abläuft, alle Anforderungen an die Datenbank weitergeleitet werden und die Datenbank sofort unter Druck steht und eine Lawine verursacht. Der Unterschied zur Cache-Aufschlüsselung: Bei Avalanche handelt es sich um viele Schlüssel, bei der Aufschlüsselung um einen bestimmten Schlüssel-Cache.

    Lösung:

    Verteilen Sie die Cache-Ablaufzeit. Sie können beispielsweise einen zufälligen Wert zur ursprünglichen Ablaufzeit hinzufügen, z. B. 1–5 Minuten, sodass die Wiederholungsrate jeder Cache-Ablaufzeit reduziert wird . Es ist schwierig, kollektive Fehlerereignisse zu verursachen.

    7. Bei der Auswahl des Caches, wann Redis und wann Memcached ausgewählt werden sollen. Situation bei der Auswahl von Redis:

    Komplexe Datenstruktur, Wertdaten sind Hash, Liste, Menge, geordnete Menge usw. Hier In diesem Fall wird Redis ausgewählt, da Memcache diese Datenstrukturen nicht erfüllen kann. Die typischsten Verwendungsszenarien sind Benutzerbestelllisten, Benutzernachrichten, Beitragskommentare usw.
    • Die Datenpersistenzfunktion ist erforderlich, aber achten Sie darauf, Redis nicht als Datenbank zu verwenden. Wenn Redis hängen bleibt, kann der Speicher schnell wiederhergestellt werden, ohne die Datenbank sofort zu belasten. Für Szenarien, in denen die Anforderungen an Nur-Lesen und Datenkonsistenz nicht hoch sind, kann persistenter Speicher verwendet werden.
    • Hochverfügbarkeit unterstützt Cluster und kann eine aktive Replikation und Lese-/Schreibtrennung erreichen, wenn Sie eine hohe Verfügbarkeit erreichen möchten , müssen Sie sekundäre Entwicklungsvorgänge durchführen.
    • Der gespeicherte Inhalt ist relativ groß und der maximale im Memcache gespeicherte Wert beträgt 1 MB.
    • Szenarien für die Auswahl von Memcache:
    Reines KV, für Unternehmen mit sehr großen Datenmengen ist Memcache aus folgenden Gründen besser geeignet:

    • Die Speicherzuweisung von Memcache übernimmt die Verwaltungsmethode eines vorab zugewiesenen Speicherpools, wodurch Zeit für die Speicherzuweisung eingespart werden kann, was zu einer Fragmentierung führen kann.

    • Mit dem virtuellen Speicher speichert Memcache alle Daten im physischen Speicher, der theoretisch mehr Daten als den physischen Speicher speichern kann Ab diesem Zeitpunkt ist Memcache bei großen Datenmengen schneller. Das Netzwerkmodell verwendet ein nicht blockierendes 10-Wiederverwendungsmodell, und Redis verwendet auch nicht blockierendes I. Wiederverwendungsmodell, aber Redis bietet neben dem KV-Speicher auch einige Sortier- und Aggregationsfunktionen und komplexe CPU-Berechnungen, die die gesamte I0-Planung blockieren. Aus dieser Sicht ist Memcache schneller, da Redis mehr Funktionen bereitstellt Modell verwendet Memcache Multithreading, der Haupt-Thread lauscht und die Worker-Sub-Threads akzeptieren Anforderungen und führen Lese- und Schreibvorgänge aus. In diesem Prozess kann es zu Sperrkonflikten kommen. Obwohl der von Redis verwendete einzelne Thread keinen Sperrkonflikt aufweist, ist es schwierig, die Eigenschaften von Multi-Core zu nutzen, um den Durchsatz zu verbessern.

    • 8. Was soll ich tun, wenn der Cache nicht mit der Datenbank übereinstimmt?
    • Angenommen, der Hauptspeicher ist getrennt und die Lese-/Schreib-getrennte Datenbank wird übernommen.

      Wenn ein Thread A zuerst die zwischengespeicherten Daten löscht und die Daten dann in die Hauptbibliothek schreibt, erfolgt zu diesem Zeitpunkt die Synchronisierung zwischen der Hauptbibliothek und die Slave-Bibliothek ist nicht abgeschlossen. Das Lesen von Daten aus dem Cache schlägt fehl. Die alten Daten werden aus der Slave-Bibliothek gelesen und dann im Cache aktualisiert.
    Der Grund für die oben genannte Inkonsistenz ist, dass die Master-Slave-Datenbankdaten inkonsistent sind. Nach dem Hinzufügen des Caches verlängert sich die Master-Slave-Inkonsistenzzeit.

    Verarbeitungsidee: Nachdem die Daten in der Slave-Datenbank aktualisiert wurden, werden gleichzeitig auch die Daten im Cache aktualisiert. Das heißt, wenn die Daten in der Slave-Datenbank aktualisiert werden, wird ein Löschvorgang an den Cache gesendet Löschen Sie die in diesem Zeitraum geschriebenen alten Daten.

    9. Wie kann die Inkonsistenz zwischen Master- und Slave-Datenbanken gelöst werden?

    Szenariobeschreibung: Bei der Master-Slave-Bibliothek sind Lesen und Schreiben getrennt. Wenn es bei der Aktualisierungssynchronisierung der Master-Slave-Bibliothek zu einer Inkonsistenz kommt

    Ignorieren Sie diese Datenkonsistenz. Unter Geschäftsbedingungen ist möglicherweise keine Echtzeitkonsistenz erforderlich.

    Zwangsweise Lesen und Schreiben der Hauptbibliothek Fügen Sie in der Hauptbibliothek einen Cache hinzu, um die Leistung beim Datenlesen zu verbessern.

    • Lesen Sie selektiv die Hauptbibliothek, fügen Sie einen Cache hinzu, um die Daten aufzuzeichnen, die aus der Hauptbibliothek gelesen werden müssen, verwenden Sie welche Bibliothek, welche Tabelle und welchen Primärschlüssel als Cache-Schlüssel und legen Sie die Cache-Ablaufzeit für die Synchronisierung fest Wenn sich diese Daten im Cache befinden, lesen Sie sie direkt aus der Hauptbibliothek. Wenn kein solcher Primärschlüssel im Cache vorhanden ist, lesen Sie sie aus der entsprechenden Slave-Bibliothek.

    • 10. Häufige Redis-Leistungsprobleme und Lösungen
    • Der Master sollte am besten keine Persistenzarbeiten wie RDB-Speicher-Snapshots und AOF-Protokolldateien durchführen Bei aktivierter AOF-Sicherung ist die Richtlinie auf eine Synchronisierung einmal pro Sekunde eingestellt

    Für die Geschwindigkeit der Master-Slave-Replikation und die Stabilität der Verbindung ist es am besten, wenn sich Master und Slave in einem lokalen Netzwerk befinden

    • Vermeiden Sie das Hinzufügen von Slave-Bibliotheken zur überlasteten Master-Bibliothek.

    • Verwenden Sie keine Mesh-Struktur für die Master-Slave-Replikation, sondern versuchen Sie, eine lineare Struktur zu verwenden, Master<–Slave1<-Slave2…

    • 11 . Welche Dateneliminierungsstrategien gibt es bei Redis? Datenbanksatz, der die Ablaufzeit festgelegt hat
    • voltile-random wählt die Daten aus dem Datensatz aus, für den die Ablaufzeit festgelegt ist, und eliminiert sie. allkeys-lru wählt die zuletzt verwendeten Daten aus dem Datensatz zur Eliminierung aus Wählt die zu entfernenden Daten aus dem Datensatz aus.

      keine Entfernung verbietet die Entfernung von Daten.
    • 12 Welche Datenstrukturen gibt es in Redis? Wenn Sie ein Benutzer der ersten Ebene sind, gibt es weitere. Wenn Sie ein fortgeschrittener oder fortgeschrittener Redis-Benutzer sind, müssen Sie außerdem die folgenden Datenstrukturen hinzufügen: HyperLogLog, Geo und Pub/Sub.

    13. Angenommen, es gibt 100 Millionen Schlüssel in Redis und 100.000 davon beginnen mit einem festen, bekannten Präfix.

    Verwenden Sie den Befehl „keys“, um die Schlüsselliste des angegebenen Musters zu scannen.

    Die andere Partei fragte dann: Wenn dieser Redis Dienste für Online-Unternehmen bereitstellt, welche Probleme gibt es bei der Verwendung des Tastenbefehls?

    Zu diesem Zeitpunkt müssen Sie eine Schlüsselfunktion von Redis beantworten: das Single-Threading von Redis. Die Schlüsselanweisung führt dazu, dass der Thread für einen bestimmten Zeitraum blockiert wird und der Onlinedienst angehalten wird. Der Dienst kann erst wiederhergestellt werden, wenn die Anweisung ausgeführt wird. Zu diesem Zeitpunkt können Sie den Scan-Befehl verwenden, um die Schlüsselliste des angegebenen Modus zu extrahieren, es besteht jedoch eine gewisse Wahrscheinlichkeit einer Duplizierung. Führen Sie dies jedoch nur einmal auf dem Client aus, dies wird jedoch insgesamt der Fall sein länger sein als die direkte Verwendung. Der Tastenbefehl ist lang.

    14. Haben Sie schon einmal eine asynchrone Warteschlange mit Redis erstellt?

    Verwenden Sie den Listentyp, um Nachrichten zu speichern, und wenn lpop keine Nachrichten hat, können Sie schlafen Wenn Sie nicht schlafen möchten, können Sie blpop für einen bestimmten Zeitraum verwenden und dann prüfen, ob Informationen vorhanden sind. Redis kann über das Pub/Sub-Topic-Abonnementmodell einen Produzenten und mehrere Konsumenten implementieren. Natürlich gibt es bestimmte Nachteile, wenn der Konsument offline geht.

    15. Wie implementiert Redis die Verzögerungswarteschlange?

    Verwenden Sie sortiertes Set, verwenden Sie Zeitstempel als Bewertung, Nachrichteninhalt als Schlüssel, rufen Sie zadd auf, um Nachrichten zu erstellen, und Verbraucher verwenden zrangbyscore, um Daten vor n Sekunden für die Abfrageverarbeitung abzurufen.

    16. Was ist Redis? Beschreiben Sie kurz die Vor- und Nachteile?

    Redis ist im Wesentlichen eine In-Memory-Datenbank vom Typ Schlüsselwert, ähnlich wie Memcached. Die gesamte Datenbank wird für den Betrieb in den Speicher geladen und die Datenbankdaten werden regelmäßig durch asynchrone Vorgänge auf die Festplatte geleert .

    Da es sich um eine reine Speicheroperation handelt, ist die Leistung von Redis sehr gut, es kann mehr als 100.000 Lese- und Schreibvorgänge pro Sekunde verarbeiten und ist die schnellste bekannte Key-ValueDB.

    Die Exzellenz von Redis liegt nicht nur in der Leistung. Der größte Vorteil von Redis besteht darin, dass es das Speichern einer Vielzahl von Datenstrukturen unterstützt. Darüber hinaus beträgt die maximale Grenze eines einzelnen Werts 1 GB, im Gegensatz zu Memcached, das nur 1 MB an Daten speichern kann. Daher können mit Redis viele nützliche Funktionen erreicht werden.

    Verwenden Sie beispielsweise seine Liste, um eine doppelt verknüpfte FIFO-Liste zu erstellen, um einen leichten Hochleistungs-Nachrichtenwarteschlangendienst zu implementieren, und verwenden Sie seinen Satz, um ein Hochleistungs-Tag-System usw. zu erstellen.

    Darüber hinaus kann Redis auch die Ablaufzeit für den gespeicherten Schlüsselwert festlegen, sodass es auch als erweiterte Version von Memcached verwendet werden kann. Der Hauptnachteil von Redis besteht darin, dass die Datenbankkapazität durch den physischen Speicher begrenzt ist und nicht zum leistungsstarken Lesen und Schreiben großer Datenmengen verwendet werden kann. Daher sind die für Redis geeigneten Szenarien hauptsächlich auf Hochleistungsoperationen und Berechnungen kleinerer Mengen beschränkt von Daten.

    17. Was sind die Vorteile von Redis im Vergleich zu Memcached?

    • Alle Werte in Memcached sind einfache Zeichenfolgen. Als Ersatz unterstützt Redis umfangreichere Datentypen. Redis ist viel schneller als Memcached. Redis kann seine Daten beibehalten. Welche Datentypen unterstützt Redis?

    • String, List, Set, SortedSet, Hashes
    • 19 Welche physischen Ressourcen verbraucht Redis hauptsächlich?
    • Speicher.

    20. Wie lautet der vollständige Name von Redis?

    Remote Dictionary Server

    21. Welche Strategien zur Dateneliminierung bietet Redis?

    noeviction: gibt einen Fehler zurück, wenn das Speicherlimit erreicht ist und der Client versucht, einen Befehl auszuführen, der dazu führen würde, dass mehr Speicher verwendet wird (die meisten Schreibbefehle, aber DEL und einige Ausnahmen)

    allkeys-lru: versucht dies Recyceln Sie den am wenigsten verwendeten Schlüssel (LRU), damit neu hinzugefügte Daten Platz zum Speichern haben.

    volatile-lru: Versuchen Sie, die am wenigsten verwendeten Schlüssel (LRU) zu recyceln, aber nur Schlüssel im abgelaufenen Satz, damit Platz für die Speicherung neu hinzugefügter Daten bleibt. allkeys-random: Zufallsschlüssel wiederverwenden, um Platz für neu hinzugefügte Daten zu schaffen.

    volatile-random: Zufallsschlüssel recyceln, sodass neu hinzugefügte Daten Platz zum Speichern haben, jedoch nur für Schlüssel im abgelaufenen Satz.

    volatile-ttl: Schlüssel im abgelaufenen Satz recyceln und Schlüsseln mit kürzerer Lebensdauer (TTL) Vorrang geben, damit Platz für die Speicherung neu hinzugefügter Daten vorhanden ist.

    22. Warum stellt Redis offiziell keine Windows-Version zur Verfügung?

    Da die aktuelle Linux-Version recht stabil ist und eine große Anzahl von Benutzern hat, besteht keine Notwendigkeit, eine Windows-Version zu entwickeln, was zu Kompatibilitäts- und anderen Problemen führen würde.

    23. Was ist die maximale Kapazität, die ein String-Typ-Wert speichern kann?

    512M

    24. Warum muss Redis alle Daten im Speicher ablegen?

    Um die schnellste Lese- und Schreibgeschwindigkeit zu erreichen, liest Redis alle Daten in den Speicher und schreibt die Daten asynchron auf die Festplatte.

    Redis zeichnet sich also durch hohe Geschwindigkeit und Datenpersistenz aus. Wenn die Daten nicht im Speicher abgelegt werden, beeinträchtigt die E/A-Geschwindigkeit der Festplatte die Leistung von Redis erheblich.

    Da Speicher heute immer billiger wird, wird Redis immer beliebter. Wenn der maximal verwendete Speicher eingestellt ist, können keine neuen Werte eingefügt werden, nachdem die Anzahl der vorhandenen Datensätze das Speicherlimit erreicht hat.

    25. Wie soll die Redis-Clusterlösung implementiert werden? Was sind die Pläne?

    codis.

    Die derzeit am häufigsten verwendete Cluster-Lösung hat grundsätzlich den gleichen Effekt wie Twemproxy, unterstützt jedoch die Wiederherstellung alter Knotendaten auf neue Hash-Knoten, wenn sich die Anzahl der Knoten ändert.

    Der mit rediscluster3.0 gelieferte Cluster zeichnet sich durch seinen verteilten Algorithmus aus, nicht durch konsistentes Hashing, sondern durch das Konzept von Hash-Slots und seine eigene Unterstützung für die Knoteneinstellung von Slave-Knoten. Einzelheiten finden Sie in der offiziellen Dokumentation.

  • Auf der Geschäftscodeebene implementiert, werden mehrere unabhängige Redis-Instanzen erstellt. Auf der Codeebene wird die Hash-Berechnung für den Schlüssel durchgeführt und dann die entsprechende Redis-Instanz zum Betrieb der Daten verwendet. Diese Methode stellt relativ hohe Anforderungen an den Hash-Layer-Code. Zu den Überlegungen gehören alternative Algorithmuslösungen nach einem Knotenausfall, die automatische Skriptwiederherstellung nach einem Datenschock, die Instanzüberwachung usw.

26. Unter welchen Umständen führt die Redis-Clusterlösung dazu, dass der gesamte Cluster nicht verfügbar ist?

Wenn in einem Cluster mit drei Knoten A, B und C ohne Replikationsmodell Knoten B ausfällt, geht der gesamte Cluster davon aus, dass ihm Steckplätze im Bereich von 5501–11000 fehlen und er nicht verfügbar ist.

27. Es gibt 20 Millionen Daten in MySQL, aber nur 200.000 Daten werden in Redis gespeichert.

Wenn die Größe des Redis-Speicherdatensatzes auf eine bestimmte Größe ansteigt, wird die Dateneliminierungsstrategie implementiert.

28. Was sind die geeigneten Szenarien für Redis?

  • Sitzungscache
    Eines der am häufigsten verwendeten Szenarien für die Verwendung von Redis ist der Sitzungscache. Der Vorteil der Verwendung von Redis zum Zwischenspeichern von Sitzungen gegenüber anderem Speicher (z. B. Memcached) besteht darin, dass Redis Persistenz bietet. Bei der Pflege eines Caches, der nicht unbedingt Konsistenz erfordert, wären die meisten Menschen unzufrieden, wenn alle Warenkorbinformationen des Benutzers verloren gehen würden. Wäre das dann immer noch der Fall?

    Da sich Redis im Laufe der Jahre verbessert hat, ist es glücklicherweise leicht herauszufinden, wie man Redis richtig zum Zwischenspeichern von Sitzungsdokumenten verwendet. Auch die bekannte kommerzielle Plattform Magento stellt Redis-Plug-ins zur Verfügung.

  • Full Page Cache (FPC)
    Zusätzlich zu den grundlegenden Sitzungstoken bietet Redis auch eine sehr einfache FPC-Plattform. Zurück zum Konsistenzproblem: Selbst wenn die Redis-Instanz neu gestartet wird, werden Benutzer aufgrund der Festplattenpersistenz keinen Rückgang der Seitenladegeschwindigkeit feststellen. Dies ist eine große Verbesserung, ähnlich wie bei PHP Local FPC.

    Nehmen wir noch einmal Magento als Beispiel: Magento bietet ein Plugin zur Verwendung von Redis als Full-Page-Cache-Backend.
    Darüber hinaus verfügt Pantheon für WordPress-Benutzer über ein sehr gutes Plug-in wp-redis, mit dem Sie die von Ihnen durchsuchten Seiten so schnell wie möglich laden können.

  • Queue
    Einer der großen Vorteile von Reids im Bereich der Speicher-Engines besteht darin, dass es Listen- und Set-Operationen bereitstellt, wodurch Redis als gute Plattform für Nachrichtenwarteschlangen verwendet werden kann. Die von Redis als Warteschlange verwendeten Vorgänge ähneln den Push/Pop-Vorgängen lokaler Programmiersprachen (wie Python) für Listen.

    Wenn Sie in Google schnell nach „Redisqueues“ suchen, werden Sie sofort auf eine große Anzahl von Open-Source-Projekten stoßen. Der Zweck dieser Projekte besteht darin, mit Redis sehr gute Back-End-Tools zu erstellen, um verschiedene Warteschlangenanforderungen zu erfüllen. Celery verfügt beispielsweise über ein Backend, das Redis als Broker verwendet. Sie können es hier anzeigen.

  • Leaderboard/Counter
    Redis implementiert den Vorgang des Erhöhens oder Verringerns von Zahlen im Speicher sehr gut. Mengen (Sets) und geordnete Mengen (SortedSet) machen es uns auch sehr einfach, diese Operationen durchzuführen. Redis stellt lediglich diese beiden Datenstrukturen bereit. Wir möchten also die Top 10 Benutzer aus der sortierten Menge erhalten – nennen wir sie „user_scores“, wir müssen es nur so machen:

  • Dies setzt natürlich voraus, dass Sie nach Ihren Benutzerbewertungen sortiert sind in aufsteigender Reihenfolge. Wenn Sie den Benutzer und die Punktzahl des Benutzers zurückgeben möchten, müssen Sie dies wie folgt ausführen:
    ZRANGEuser_scores010WITHSCORES
    AgoraGames ist ein gutes Beispiel, implementiert in Ruby, und seine Bestenliste verwendet Redis zum Speichern von Daten. Sie können es hier sehen.

  • Publish/Subscribe
    Last (aber sicherlich nicht zuletzt) ​​ist die Publish/Subscribe-Funktionalität von Redis. Es gibt tatsächlich viele Anwendungsfälle für Publish/Subscribe. Ich habe gesehen, wie Leute es in sozialen Netzwerkverbindungen, als Auslöser für Veröffentlichungs-/Abonnement-basierte Skripte und sogar zum Aufbau von Chat-Systemen mithilfe der Veröffentlichungs-/Abonnementfunktion von Redis verwenden!

29. Welche Java-Clients werden von Redis unterstützt? Welches wird offiziell empfohlen?

Redisson, Jedis, Salat usw., die offizielle Empfehlung lautet Redisson.

30. Welche Beziehung besteht zwischen Redis und Redisson?

Redisson ist ein erweiterter Redis-Client für die verteilte Koordination, der Benutzern dabei helfen kann, einige Java-Objekte (Bloomfilter, BitSet, Set, SetMultimap, ScoredSortedSet, SortedSet, Map, ConcurrentMap, List, ListMultimap usw.) einfach in einer verteilten Umgebung zu implementieren , BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, ReadWriteLock, AtomicLong, CountDownLatch, Publish/Subscribe, HyperLogLog).

31. Was sind die Vor- und Nachteile von Jedis und Redisson?

Jedis ist ein von Redis in Java implementierter Client.
Redisson implementiert verteilte und skalierbare Java-Datenstrukturen. Seine Funktionen sind einfacher und unterstützen keine String-Operationen Redis-Funktionen wie Sortierung, Transaktionen, Pipelines und Partitionen. Der Zweck von Redisson besteht darin, die Trennung der Benutzeranliegen von Redis zu fördern, sodass sich Benutzer mehr auf die Verarbeitung der Geschäftslogik konzentrieren können.

32. Wie lege ich ein Passwort fest und verifiziere es in Redis?

Passwort festlegen: Konfigurationssatz erfordert Pass 123456 Autorisierungspasswort: auth123456

33. Sprechen Sie über das Konzept des Redis-Hash-Slots?

Der Redis-Cluster verwendet kein konsistentes Hashing, sondern führt das Konzept der Hash-Slots ein. Jeder Schlüssel besteht die CRC16-Prüfung und Modulo 16384, um zu bestimmen, welcher Slot platziert werden soll für einen Teil der Hash-Slots.

34. Was ist das Master-Slave-Replikationsmodell des Redis-Clusters?

Um den Cluster weiterhin verfügbar zu machen, wenn einige Knoten ausfallen oder die meisten Knoten nicht kommunizieren können, verwendet der Cluster ein Master-Slave-Replikationsmodell und jeder Knoten verfügt über N-1-Replikate

35 Operationen verloren gehen? Warum?

Redis garantiert keine starke Datenkonsistenz, was bedeutet, dass der Cluster in der Praxis unter bestimmten Bedingungen Schreibvorgänge verlieren kann.

36. Wie werden Redis-Cluster repliziert?

Asynchrone Replikation

37. Was ist die maximale Anzahl von Knoten in einem Redis-Cluster?

16384.

38. Wie wähle ich eine Datenbank für den Redis-Cluster aus?

Der Redis-Cluster kann derzeit keine Datenbank auswählen und ist standardmäßig auf Datenbank 0 eingestellt.

39. Wie teste ich die Konnektivität von Redis?

ping

40 Wozu dienen Pipelines in Redis?

Ein Request/Response-Server kann neue Anfragen bearbeiten, auch wenn auf alte Anfragen noch nicht geantwortet wurde. Dadurch ist es möglich, mehrere Befehle an den Server zu senden, ohne auf eine Antwort warten zu müssen, und diese Antwort schließlich in einem Schritt zu lesen.

Das ist Pipelining, eine Technik, die seit Jahrzehnten weit verbreitet ist. Beispielsweise unterstützen viele POP3-Protokolle diese Funktion, was den Download neuer E-Mails vom Server erheblich beschleunigt.

41. Wie versteht man Redis-Transaktionen?

Eine Transaktion ist ein einzelner isolierter Vorgang: Alle Befehle in der Transaktion werden serialisiert und der Reihe nach ausgeführt. Während der Ausführung der Transaktion wird diese nicht durch Befehlsanfragen anderer Clients unterbrochen. Eine Transaktion ist eine atomare Operation: Entweder werden alle Befehle in der Transaktion ausgeführt, oder keiner von ihnen wird ausgeführt.

42. Welche Befehle beziehen sich auf Redis-Transaktionen?

MULTI, EXEC, DISCARD, WATCH

43, wie stelle ich die Ablaufzeit bzw. die dauerhafte Gültigkeit von Rediskey ein?

EXPIRE- und PERSIST-Befehle.

44. Wie optimiert Redis den Speicher?

Verwenden Sie so viele Hashes wie möglich. Eine Hash-Tabelle (d. h. die in einer Hash-Tabelle gespeicherte Zahl ist klein) benötigt sehr wenig Speicher, daher sollten Sie Ihr Datenmodell so weit wie möglich in eine Hash-Tabelle abstrahieren. Wenn in Ihrem Websystem beispielsweise ein Benutzerobjekt vorhanden ist, legen Sie keinen separaten Schlüssel für den Namen, den Nachnamen, die E-Mail-Adresse und das Passwort des Benutzers fest. Speichern Sie stattdessen alle Informationen des Benutzers in einer Hash-Tabelle.

45. Wie funktioniert der Redis-Recyclingprozess?

Ein Client hat einen neuen Befehl ausgeführt und neue Daten hinzugefügt.
Redi prüft die Speichernutzung, wenn sie größer als das Limit von maxmemory ist, wird sie gemäß der festgelegten Strategie recycelt. Ein neuer Befehl wird ausgeführt usw.

Wir überschreiten also ständig die Grenze der Speichergrenze, indem wir ständig die Grenze erreichen und dann ständig unterhalb der Grenze wieder recyceln.

Wenn das Ergebnis eines Befehls dazu führt, dass viel Speicher beansprucht wird (z. B. das Speichern der Schnittmenge einer großen Menge in einem neuen Schlüssel), dauert es nicht lange, bis das Speicherlimit durch diese Speichernutzung überschritten wird .

Weitere Kenntnisse zum Thema Programmierung finden Sie unter: Programmiervideos! !

Das obige ist der detaillierte Inhalt vonFassen Sie einige Interviewfragen zum Redis-Cache zusammen und teilen Sie sie. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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