Ich habe 50 Interviewfragen zu Redis im Internet gesehen, aber es wurden keine Antworten darauf gegeben. Ich habe zuvor auch nach der Antwort auf diese Redis-Interviewfrage gesucht, daher werde ich die Antwort heute teilen. Ich habe viel Zeit damit verbracht, diese Fragen und Antworten zu Redis-Interviews zusammenzustellen. Ich hoffe, dass sie für alle hilfreich sein werden.
Nachdem Sie diese Redis-Interviewfragen verstanden haben, können Sie im Grunde ein Meister des Interviews werden und den Interviewer schlagen, haha~
1 es Redis?
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 zur Speicherung auf die Festplatte geleert asynchrone Vorgänge regelmäßig durchführen. Da es sich um eine reine Speicheroperation handelt, verfügt Redis über eine hervorragende Leistung und kann mehr als 100.000 Lese- und Schreibvorgänge pro Sekunde verarbeiten. Es ist die schnellste bekannte Schlüsselwert-Datenbank.
Die Exzellenz von Redis liegt nicht nur in seiner Leistung, sondern auch darin, dass es das Speichern einer Vielzahl von Datenstrukturen unterstützt, im Gegensatz zu Memcached Redis kann nur 1 MB Daten speichern. Es wird zum Implementieren vieler nützlicher Funktionen verwendet, z. B. zum Erstellen einer doppelt verknüpften FIFO-Liste mit seiner Liste, zum Implementieren eines leichten, leistungsstarken Nachrichtenwarteschlangendienstes und zum Erstellen eines Hochleistungs-Nachrichtenwarteschlangendienstes mit seinem Set Tag-System usw.
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 Hochleistungslesen 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.
Besondere Empfehlung: 2020 Redis-Interviewfragen (aktuell)
2. Was sind die Vorteile von Redis im Vergleich zu Memcached?
(1) Alle Werte in Memcached sind einfache Zeichenfolgen, und Redis unterstützt als Ersatz umfangreichere Datentypen
(2) Redis ist schneller als Memcached Viel schneller
(3) Redis kann seine Daten beibehalten
3 Welche Datentypen unterstützt Redis?
String, Liste, Satz, sortierter Satz, Hashes
Welche physischen Ressourcen verbraucht Redis hauptsächlich?
Redis ist eine leistungsstarke speicherbasierte Datenbank – die hauptsächlich auf Speicher basiert.
5. Wie lautet der vollständige Name von Redis?
Remote Dictionary Server
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 mehr Speicher verbrauchen würde (die meisten Schreibbefehle, aber DEL und einige Ausnahmen)
allkeys-lru: Versuchen Sie, die am wenigsten verwendeten Schlüssel (LRU) zu recyceln, damit Platz für neu hinzugefügte Daten bleibt.
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 wiederverwenden, um Platz für neu hinzugefügte Daten zu schaffen, jedoch nur für Schlüssel im abgelaufenen Satz.
volatile-ttl: Schlüssel im abgelaufenen Satz recyceln und Schlüsseln mit kürzeren Überlebenszeiten (TTL) Vorrang geben, damit Platz für die Speicherung neu hinzugefügter Daten vorhanden ist.
7. 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.
8. Was ist die maximale Kapazität, die ein String-Typ-Wert speichern kann?
512M
9. 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. Heutzutage, da Speicher immer billiger wird, wird Redis immer beliebter.
Wenn der maximal genutzte Speicher eingestellt ist, können keine neuen Werte eingefügt werden, nachdem die Anzahl der Datensätze das Speicherlimit erreicht hat.
10. Wie soll die Redis-Clusterlösung implementiert werden? Was sind die Pläne?
1), twemproxy, das allgemeine Konzept ist, dass es einer Proxy-Methode ähnelt und sich nicht von gewöhnlichem Redis unterscheidet. Nachdem Sie mehrere Redis-Instanzen darunter eingerichtet haben, ändern Sie bei der Verwendung den Ort, an dem Redis benötigt wird Um eine Verbindung zu Twemproxy herzustellen, empfängt es die Anfrage als Proxy und verwendet einen konsistenten Hash-Algorithmus, um die Anfrage an das spezifische Redis zu übertragen und das Ergebnis an Twemproxy zurückzugeben. Es ist einfach zu verwenden (im Vergleich zu Redis müssen Sie nur den Verbindungsport ändern) und ist die erste Wahl für die Erweiterung alter Projekte. Problem: Aufgrund des Drucks der twemproxy-eigenen Single-Port-Instanz ändert sich der berechnete Wert nach Verwendung von konsistentem Hashing, wenn sich die Anzahl der Redis-Knoten ändert, und die Daten können nicht automatisch auf den neuen Knoten verschoben werden.
2) Codis, die derzeit am häufigsten verwendete Clusterlö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.
3) Der Cluster, der mit Redis Cluster3.0 geliefert wird, 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.
4. Auf der Geschäftscodeebene implementiert, mehrere unabhängige Redis-Instanzen erstellen, auf der Codeebene eine Hash-Berechnung für den Schlüssel durchführen und dann die Daten auf der entsprechenden Redis-Instanz verarbeiten. 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.
11. Unter welchen Umständen führt die Redis-Clusterlösung dazu, dass der gesamte Cluster nicht mehr 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 es an Slots im Bereich von 5501 mangelt. 11000. Nicht verfügbar.
12. 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.
13. Was sind die geeigneten Szenarien für Redis?
(1) 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.
(2), Full Page Cache (FPC) Zusätzlich zum Basis-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 keine Verringerung 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, das Ihnen dabei helfen kann, die von Ihnen durchsuchten Seiten so schnell wie möglich zu laden.
(3) Einer der großen Vorteile von Queue Redis 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 der Liste in lokalen Programmiersprachen (wie Python). Wenn Sie in Google schnell nach „Redis-Warteschlangen“ 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.
(4), das Leaderboard/Counter Redis implementiert den Vorgang des Erhöhens oder Verringerns von Zahlen im Speicher sehr gut. Sets und sortierte Sets machen es uns auch sehr einfach, diese Operationen durchzuführen. Redis stellt lediglich diese beiden Datenstrukturen bereit. Um also die Top-10-Benutzer aus der sortierten Menge zu erhalten – nennen wir sie „user_scores“, müssen wir es einfach so machen: Dies setzt natürlich voraus, dass Sie es basierend auf den Bewertungen Ihrer Benutzer tun. Zunehmende Sortierung. Wenn Sie den Benutzer und die Punktzahl des Benutzers zurückgeben möchten, müssen Sie dies wie folgt ausführen: ZRANGE user_scores 0 10 WITHSCORESAgora Games ist ein gutes Beispiel, implementiert in Ruby, und seine Rankings verwenden Redis zum Speichern von Daten. Sie können es hier sehen .
(5), Veröffentlichen/Abonnieren Last (aber sicherlich nicht zuletzt) ist die Publish/Subscribe-Funktion 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-/Abonnementfunktionalität von Redis verwenden! (Nein, das stimmt, Sie können es nachschauen).
14. Welche Java-Clients werden von Redis unterstützt? Welches wird offiziell empfohlen?
Redisson, Jedis, Salat usw. Redisson wird offiziell empfohlen.
15. 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 (Bloom-Filter, BitSet, Set, SetMultimap, ScoredSortedSet, SortedSet, Map) einfach in einer verteilten Umgebung zu implementieren, ConcurrentMap, List , ListMultimap, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, ReadWriteLock, AtomicLong, CountDownLatch, Publish/Subscribe, HyperLogLog).
16. Was sind die Vor- und Nachteile von Jedis und Redisson?
Jedis ist ein von Redis in Java implementierter Client. Seine API bietet eine relativ umfassende Unterstützung für Redis-Befehle. Im Vergleich zu Jedis sind seine Funktionen relativ einfach. unterstützt keine Zeichenfolgenoperationen und keine 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.
17. Wie lege ich ein Passwort fest und verifiziere das Passwort für Redis?
Passwort festlegen: config set requirepass 123456 Autorisierungspasswort: auth 123456
18. Sprechen Sie über das Konzept des Redis-Hash-Slots?
Der Redis-Cluster verwendet kein konsistentes Hashing, sondern führt das Konzept des Hash-Slots ein. Jeder Schlüssel wird durch Modulo 16384 bestimmt, welcher Slot platziert werden soll Der Knoten im Cluster ist für einen Teil des Hash-Slots verantwortlich.
19. 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.
20. Gehen Schreibvorgänge im Redis-Cluster verloren? Warum?
Redis garantiert keine starke Datenkonsistenz, was bedeutet, dass der Cluster in der Praxis unter bestimmten Bedingungen Schreibvorgänge verlieren kann.
21. Wie werden Redis-Cluster repliziert?
Asynchrone Replikation
22. Was ist die maximale Anzahl von Knoten in einem Redis-Cluster?
16384.
23. 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.
24. Wie teste ich die Konnektivität von Redis?
Ping
25. Wozu dienen Pipelines in Redis?
Ein Anfrage-/Antwortserver 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. Hierbei handelt es sich um Pipelining, eine Technik, die seit Jahrzehnten weit verbreitet ist. Beispielsweise unterstützen viele POP3-Protokolle diese Funktion, was das Herunterladen neuer E-Mails vom Server erheblich beschleunigt.
26. Wie versteht man Redis-Transaktionen?
Eine Transaktion ist eine einzelne isolierte Operation: 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.
27. Welche Befehle beziehen sich auf Redis-Transaktionen?
MULTI, EXEC, DISCARD, WATCH ##28. Wie stelle ich die Ablaufzeit bzw. die dauerhafte Gültigkeit des Redis-Schlüssels ein? EXPIRE- und PERSIST-Befehle.
29. Wie optimiert Redis den Speicher?
Verwenden Sie so oft wie möglich Hash-Tabellen (was bedeutet, dass die in der Hash-Tabelle gespeicherte Anzahl gering ist) und verbrauchen Sie sehr wenig Speicher. Daher sollten Sie Ihr Datenmodell so weit wie möglich abstrahieren möglich Innerhalb einer Hash-Tabelle. Wenn Sie beispielsweise ein Benutzerobjekt in Ihrem Websystem haben, 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
30. Wie funktioniert der Redis-Recyclingprozess?Ein Client hat einen neuen Befehl ausgeführt und neue Daten hinzugefügt. Redi überprüft die Speichernutzung, wenn sie größer als das Limit von maxmemory ist, wird sie gemäß der festgelegten Richtlinie 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 unter die Grenze zurückkehren. 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.
31. Welcher Algorithmus wird für das Redis-Recycling verwendet?LRU-Algorithmus
32. Wie fügt Redis große Datenmengen ein?
Ab Redis 2.6 unterstützt redis-cli einen neuen Modus namens Pipe-Modus für die Durchführung großer Datenmengen.
33. Warum benötigen Sie eine Redis-Partitionierung?
Durch die Partitionierung kann Redis größeren Speicher verwalten und Redis kann den Speicher aller Maschinen nutzen. Ohne Partitionen können Sie nur den Arbeitsspeicher einer Maschine nutzen. Durch die Partitionierung kann die Rechenleistung von Redis durch einfaches Hinzufügen von Computern verdoppelt werden. Mit zunehmender Anzahl von Computern und Netzwerkkarten verdoppelt sich auch die Netzwerkbandbreite von Redis.
34. Wissen Sie, welche Redis-Partitionsimplementierungslösungen verfügbar sind?
Clientseitige Partitionierung bedeutet, dass der Client bereits entschieden hat, in welchem Redis-Knoten die Daten gespeichert oder von diesem gelesen werden. Die meisten Clients implementieren bereits eine clientseitige Partitionierung. Proxy-Partitionierung bedeutet, dass der Client die Anfrage an den Proxy sendet und der Proxy dann entscheidet, zu welchem Knoten er zum Schreiben oder Lesen von Daten gehen soll. Der Agent entscheidet anhand der Partitionsregeln, welche Redis-Instanzen angefordert werden sollen, und gibt sie dann basierend auf den Redis-Antwortergebnissen an den Client zurück. Eine Proxy-Implementierung von Redis und Memcached ist das Twemproxy-Abfragerouting (Abfragerouting), was bedeutet, dass der Client zufällig eine beliebige Redis-Instanz anfordert und Redis die Anfrage dann an den richtigen Redis-Knoten weiterleitet. Redis Cluster implementiert eine Hybridform des Abfrageroutings, aber anstatt Anforderungen direkt von einem Redis-Knoten an einen anderen Redis-Knoten weiterzuleiten, leitet es mithilfe des Clients direkt an den richtigen Redis-Knoten weiter.
35. Was sind die Nachteile der Redis-Partitionierung?
Vorgänge mit mehreren Schlüsseln werden grundsätzlich nicht unterstützt. Beispielsweise können Sie zwei Sammlungen nicht überschneiden, da sie möglicherweise in verschiedenen Redis-Instanzen gespeichert sind (eigentlich gibt es für diese Situation eine Möglichkeit, aber der Schnittbefehl kann nicht direkt verwendet werden). Wenn Sie mehrere Schlüssel gleichzeitig verwenden, können Sie keine Redis-Transaktionen verwenden. Die Partitionierungsgranularität ist der Schlüssel, daher ist es nicht möglich, einen Datensatz mit einem sehr langen einzelnen großen Schlüssel wie einen sehr großen sortierten Satz zu teilen. Bei der Verwendung von Partitionen wird die Datenverarbeitung sehr kompliziert sein, zum Beispiel müssen Sie für Backups gleichzeitig RDB/AOF-Dateien von verschiedenen Redis-Instanzen und Hosts sammeln. Die dynamische Vergrößerung oder Verkleinerung kann bei der Partitionierung komplex sein. Der Redis-Cluster fügt zur Laufzeit Redis-Knoten hinzu oder löscht sie, wodurch eine für Benutzer weitgehend transparente Datenverteilung erreicht werden kann. Einige andere Client-Partitionierungs- oder Proxy-Partitionierungsmethoden unterstützen diese Funktion jedoch nicht. Allerdings gibt es eine Pre-Sharding-Technologie, die dieses Problem ebenfalls besser lösen kann.
36. Wie erweitere ich die persistenten Daten und den Cache von Redis?
Wenn Redis als Cache verwendet wird, verwenden Sie konsistentes Hashing, um eine dynamische Erweiterung und Kontraktion zu erreichen. Wenn Redis als persistenter Speicher verwendet wird, muss eine feste Schlüssel-zu-Knoten-Zuordnungsbeziehung verwendet werden und die Anzahl der Knoten kann nach ihrer Festlegung nicht mehr geändert werden. Andernfalls (d. h. wenn sich Redis-Knoten dynamisch ändern müssen) muss ein System verwendet werden, das Daten zur Laufzeit neu ausgleichen kann, und derzeit ist dies nur für Redis-Cluster möglich.
37. Sollte verteiltes Redis in der frühen Phase oder in der späteren Phase durchgeführt werden, wenn der Umfang erhöht wird? Warum?
Da Redis so leichtgewichtig ist (eine einzelne Instanz benötigt nur 1 MB Speicher), besteht der beste Weg, zukünftige Erweiterungen zu verhindern, darin, weitere Instanzen von vorne zu starten. Selbst wenn Sie nur einen Server haben, können Sie Redis von Anfang an verteilt ausführen und dabei Partitionen verwenden, um mehrere Instanzen auf demselben Server zu starten. Das Einrichten einiger weiterer Redis-Instanzen zu Beginn, beispielsweise 32 oder 64 Instanzen, mag für die meisten Benutzer umständlich sein, aber auf lange Sicht ist es den Verzicht wert. Wenn Ihre Daten in diesem Fall weiter wachsen und Sie mehr Redis-Server benötigen, müssen Sie lediglich die Redis-Instanz von einem Dienst auf einen anderen Server migrieren (ohne das Problem der Neupartitionierung zu berücksichtigen). Sobald Sie einen weiteren Server hinzufügen, müssen Sie die Hälfte Ihrer Redis-Instanzen von der ersten Maschine auf die zweite Maschine migrieren.
38. Was ist Twemproxy?
Twemproxy ist ein von Twitter verwaltetes (Caching-)Proxysystem, das das ASCII-Protokoll und das Redis-Protokoll von Memcached als Proxy ausführt. Es ist ein Single-Thread-Programm, das in der Sprache C geschrieben ist und sehr schnell läuft. Es handelt sich um Open-Source-Software unter der Apache 2.0-Lizenz. Twemproxy unterstützt die automatische Partitionierung. Wenn einer seiner Proxy-Redis-Knoten nicht verfügbar ist, wird der Knoten automatisch ausgeschlossen (dadurch wird die ursprüngliche Schlüssel-Instanz-Zuordnungsbeziehung geändert, daher sollten Sie Twemproxy nur verwenden, wenn Sie Redis als Cache verwenden). Bei Twemproxy selbst gibt es keinen einzigen Problempunkt, da Sie mehrere Twemproxy-Instanzen starten und Ihren Client dann eine Verbindung zu jeder Twemproxy-Instanz herstellen lassen können. Twemproxy ist eine Zwischenschicht zwischen dem Redis-Client und dem Server. Die Handhabung der Partitionsfunktion sollte nicht kompliziert und relativ zuverlässig sein.
39. Welche Clients unterstützen konsistentes Hashing?
Redis-rb, Predis usw.
40. Was ist der Unterschied zwischen Redis und anderen Key-Value-Stores?
Redis verfügt über komplexere Datenstrukturen und bietet atomare Operationen für diese. Dies ist ein evolutionärer Weg, der sich von anderen Datenbanken unterscheidet. Die Datentypen von Redis basieren auf grundlegenden Datenstrukturen und sind für Programmierer transparent, ohne dass zusätzliche Abstraktionen erforderlich sind. Redis wird im Speicher ausgeführt, kann jedoch auf der Festplatte gespeichert werden. Daher muss der Speicher abgewogen werden, wenn verschiedene Datensätze mit hoher Geschwindigkeit gelesen und geschrieben werden. Die Datenmenge sollte nicht größer sein als der Hardwarespeicher. Ein weiterer Vorteil von In-Memory-Datenbanken besteht darin, dass der Betrieb im Speicher im Vergleich zu denselben komplexen Datenstrukturen auf der Festplatte sehr einfach ist, sodass Redis viele Dinge mit hoher interner Komplexität erledigen kann. Außerdem sind sie im Hinblick auf das Festplattenformat kompakt und werden durch Anhängen generiert, da sie keinen wahlfreien Zugriff erfordern.
41. Wie hoch ist die Speichernutzung von Redis?
Um Ihnen ein Beispiel zu geben: 1 Million Schlüssel-Wert-Paare (die Schlüssel sind 0 bis 999999 und der Wert ist die Zeichenfolge „Hallo Welt“) belegen 100 MB auf meinem 32-Bit-Mac-Notebook. Das Einfügen derselben Daten in einen Schlüssel erfordert nur 16 MB. Dies liegt daran, dass der Schlüsselwert einen großen Overhead hat. Die Ausführung auf Memcached führt zu ähnlichen Ergebnissen, der Overhead ist jedoch etwas geringer als der von Redis, da Redis Typinformationen, Referenzzählung usw. aufzeichnet. Natürlich ist das Verhältnis zwischen beiden bei großen Schlüssel-Wert-Paaren viel besser. 64-Bit-Systeme erfordern mehr Speicheraufwand als 32-Bit-Systeme, insbesondere wenn die Schlüssel-Wert-Paare klein sind. Dies liegt daran, dass Zeiger in 64-Bit-Systemen 8 Bytes belegen. Aber natürlich unterstützen 64-Bit-Systeme größeren Speicher. Um einen großen Redis-Server zu betreiben, müssen Sie also mehr oder weniger ein 64-Bit-System verwenden.
42. Welche Möglichkeiten gibt es, die Speichernutzung von Redis zu reduzieren?
Wenn Sie eine 32-Bit-Redis-Instanz verwenden, können Sie Sammlungstypdaten wie Hash, Liste, sortierter Satz, Satz usw. gut nutzen, da es normalerweise viele kleine Schlüsselwerte gibt können kompakter zusammen verwendet werden.
43. Welcher Befehl wird verwendet, um Redis-Nutzungs- und Statusinformationen anzuzeigen?
Info
44. Was passiert, wenn Redis nicht mehr genügend Speicher hat?
Wenn die festgelegte Obergrenze erreicht ist, gibt der Redis-Schreibbefehl eine Fehlermeldung zurück (der Lesebefehl kann jedoch weiterhin normal zurückkehren). Oder Sie können Redis als Cache verwenden, um die Konfigurationseliminierung zu nutzen Wenn Redis den Speicher erreicht, werden alte Inhalte innerhalb einer bestimmten Zeitspanne gelöscht.
45. Redis ist Single-Threaded. Wie kann die Auslastung der Multi-Core-CPU verbessert werden?
Sie können mehrere Redis-Instanzen auf demselben Server bereitstellen und sie als unterschiedliche Server verwenden. Irgendwann reicht ein Server ohnehin nicht aus. Wenn Sie also mehrere CPUs verwenden möchten, können Sie Sharding in Betracht ziehen.
46. Wie viele Schlüssel kann eine Redis-Instanz maximal speichern?
Wie viele Elemente können List, Set und Sorted Set maximal speichern? Theoretisch kann Redis bis zu 232 Schlüssel verarbeiten, und in tatsächlichen Tests speicherte jede Instanz mindestens 250 Millionen Schlüssel. Wir testen einige größere Werte. Jede Liste, Menge und sortierte Menge kann 232 Elemente enthalten. Mit anderen Worten: Das Speicherlimit von Redis ist der verfügbare Speicherwert im System.
47. Redis häufige Leistungsprobleme und Lösungen?
(1) Der Master sollte am besten keine Persistenzarbeiten wie RDB-Speicher-Snapshots und AOF-Protokolldateien durchführen.
(2) Wenn die Daten wichtig sind, sollte ein Slave aktiviert werden AOF-Backup-Daten und -Richtlinie sind so eingestellt, dass sie einmal pro Sekunde synchronisiert werden
(3) Für die Geschwindigkeit der Master-Slave-Replikation und die Stabilität der Verbindung ist es am besten, wenn sich Master und Slave im selben LAN befinden
(4) Vermeiden Sie das Hinzufügen von Slave-Bibliotheken zur Master-Bibliothek, die unter großem Druck steht.
(5) Verwenden Sie keine Graphstruktur für die Master-Slave-Replikation. Dies ist stabiler Verwenden Sie eine einseitig verknüpfte Listenstruktur, das heißt: Master <- Slave1 <- Slave2 <- Slave3 ... Diese Struktur ist praktisch, um das Single-Point-of-Failure-Problem zu lösen und den Ersatz des Masters durch den Slave zu realisieren. Wenn der Master auflegt, können Sie Slave1 sofort als Master aktivieren und alles andere unverändert lassen.
48. Welche Persistenzmethoden bietet Redis?
Der RDB-Persistenzmodus kann in bestimmten Zeitintervallen Snapshots Ihrer Daten speichern. Beim Neustart des Servers werden diese Befehle erneut ausgeführt, um die ursprünglichen Daten wiederherzustellen Verwendet das Redis-Protokoll, um jeden Schreibvorgang an das Ende der Datei anzuhängen. Redis kann die AOF-Datei auch im Hintergrund neu schreiben, sodass die Größe der AOF-Datei nicht zu groß wird, wenn Sie nur Ihre Daten speichern möchten Wenn der Server ausgeführt wird, können Sie auch keine Persistenzmethode verwenden. In diesem Fall wird beim Neustart von Redis zuerst die AOF-Datei geladen, um die ursprünglichen Daten wiederherzustellen Unter normalen Umständen ist der von der AOF-Datei gespeicherte Datensatz vollständiger als der von der RDB-Datei gespeicherte Datensatz. Das Wichtigste ist, den Unterschied zwischen RDB- und AOF-Persistenzmethoden zu verstehen.
49. Wie wählt man die geeignete Persistenzmethode aus?
Generell gilt: Wer eine mit PostgreSQL vergleichbare Datensicherheit erreichen möchte, sollte beide Persistenzfunktionen gleichzeitig nutzen. Wenn Ihnen Ihre Daten am Herzen liegen, Sie sich aber einen Datenverlust innerhalb weniger Minuten leisten können, können Sie einfach die RDB-Persistenz verwenden. Viele Benutzer verwenden nur die AOF-Persistenz, diese Methode wird jedoch nicht empfohlen, da das regelmäßige Generieren von RDB-Snapshots (Snapshots) für die Datenbanksicherung sehr praktisch ist und die Geschwindigkeit der RDB-Wiederherstellung von Datensätzen schneller ist als die von AOF, mit Ausnahme der Verwendung RDB kann auch die zuvor erwähnten Fehler des AOF-Programms vermeiden.
50. Wird die Änderung der Konfiguration in Echtzeit wirksam, ohne dass Redis neu gestartet werden muss?
Für laufende Instanzen gibt es eine Reihe von Konfigurationsoptionen, die über den Befehl CONFIG SET geändert werden können, ohne dass ein Neustart erforderlich ist. Ab Redis 2.2 ist es möglich, von AOF zur Snapshot-Persistenz von RDB oder auf andere Weise zu wechseln, ohne Redis neu starten zu müssen. Rufen Sie den Befehl „CONFIG GET *“ auf, um weitere Informationen zu erhalten. Gelegentlich ist jedoch ein Neustart erforderlich, beispielsweise um das Redis-Programm auf eine neue Version zu aktualisieren oder wenn Sie einige Konfigurationsparameter ändern müssen, die derzeit nicht vom Befehl CONFIG unterstützt werden.
Empfohlenes Lernen: Redis-Video-Tutorial
Das obige ist der detaillierte Inhalt vonDie umfassendsten 50 Fragen und Antworten zu Redis-Interviews in der Geschichte. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!