Wenn Sie Redis während des Interviews immer noch nicht verstehen, werfen Sie einen Blick auf diese 40 Interviewfragen (Teil 1).

Wenn Sie Redis während des Interviews immer noch nicht verstehen, werfen Sie einen Blick auf diese 40 Interviewfragen (Teil 1).

1. Was ist Redis?

Redis ist vollständig Open Source und kostenlos, entspricht dem BSD-Protokoll und ist eine leistungsstarke Schlüsselwertdatenbank. Redis und andere Schlüsselwert-Caching-Produkte weisen die folgenden drei Merkmale auf:

(1) Redis unterstützt die Datenpersistenz. Es kann die Daten im Speicher auf der Festplatte speichern und zur Verwendung beim Neustart erneut laden.

(2) Redis unterstützt nicht nur einfache Daten vom Typ Schlüsselwert, sondern bietet auch die Speicherung von Datenstrukturen wie Liste, Satz, Zset und Hash.

(3) Redis unterstützt die Datensicherung, also die Datensicherung im Master-Slave-Modus.

Vorteile von Redis

(1) Extrem hohe Leistung – Redis kann mit einer Geschwindigkeit von 110.000 Mal/s lesen und mit einer Geschwindigkeit von 81.000 Mal/s schreiben.

(2) Umfangreiche Datentypen – Redis unterstützt Datentypoperationen vom Typ Strings, Listen, Hashes, Mengen und geordnete Mengen für binäre Fälle.

(3) Atomar – Alle Operationen von Redis sind atomar, was bedeutet, dass sie entweder erfolgreich ausgeführt werden oder überhaupt nicht ausgeführt werden. Einzelne Operationen sind atomar. Mehrere Operationen unterstützen auch Transaktionen, d. h. Atomizität, die durch die Anweisungen MULTI und EXEC umschlossen werden.

(4) Umfangreiche Funktionen – Redis unterstützt auch Publish/Subscribe, Benachrichtigungen, Schlüsselablauf und andere Funktionen.

Wie unterscheidet sich Redis von anderen Key-Value-Stores?

(1) Redis verfügt über komplexere Datenstrukturen und bietet atomare Operationen für diese. Dies ist ein Evolutionspfad, 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.

(2) 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, da die Datenmenge nicht größer als der Hardwarespeicher sein darf. 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 Direktzugriff erfordern.

2. Was sind die Datentypen von Redis?

Antwort: Redis unterstützt fünf Datentypen: String (String), Hash (Hash), List (Liste), Set (Set) und zsetsorted Set: Ordered Set). Die in unseren tatsächlichen Projekten am häufigsten verwendeten sind String und Hash. Wenn Sie ein fortgeschrittener Redis-Benutzer sind, müssen Sie außerdem die folgenden Datenstrukturen hinzufügen: HyperLogLog, Geo und Pub/Sub. Wenn Sie sagen, dass Sie mit Redis-Modulen wie BloomFilter, RedisSearch und Redis-ML gespielt haben, beginnen die Augen des Interviewers zu leuchten.

3. Welche Vorteile bietet die Verwendung von Redis?

(1) Es ist schnell, da die Daten im Speicher gespeichert werden, ähnlich wie bei HashMap. Der Vorteil von HashMap besteht darin, dass die zeitliche Komplexität von Suche und Betrieb O1 ist) (2) Es unterstützt umfangreiche Datentypen, einschließlich Zeichenfolge, Liste, Menge, Zset, Hash usw. (3) Unterstützte Transaktionen und Operationen sind alle atomar. Die sogenannte Atomizität bedeutet, dass alle Änderungen an den Daten entweder ausgeführt oder überhaupt nicht ausgeführt werden. (4) Umfangreiche Funktionen: können zum Caching verwendet werden, Nachrichten und Festlegen der Ablaufzeit per Schlüssel. Nach Ablauf werden sie automatisch gelöscht

4. 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 viel schneller als Memcached. (3) Redis kann seine Daten beibehalten

5. Was sind die Unterschiede zwischen Memcache und Redis?

(1) Speichermethode Memecache speichert alle Daten im Speicher. Nach einem Stromausfall bleibt er hängen. Die Daten dürfen die Speichergröße nicht überschreiten. Redis wird teilweise auf der Festplatte gespeichert, was die Datenpersistenz gewährleistet. (2) Datenunterstützungstypen Memcache unterstützt relativ einfache Datentypen. Redis verfügt über komplexe Datentypen. (3) Die verwendeten zugrunde liegenden Modelle sind unterschiedlich, die zugrunde liegenden Implementierungsmethoden und die Anwendungsprotokolle für die Kommunikation mit dem Client sind unterschiedlich. Redis baut direkt seinen eigenen VM-Mechanismus auf, denn wenn das allgemeine System Systemfunktionen aufruft, verschwendet es eine gewisse Zeit zum Verschieben und Anfordern.

6. Ist Redis Single-Process und Single-Threaded?

Antwort: Redis ist ein einzelner Prozess und ein einzelner Thread. Redis verwendet Warteschlangentechnologie, um gleichzeitigen Zugriff in seriellen Zugriff umzuwandeln, wodurch der Overhead der herkömmlichen seriellen Datenbanksteuerung entfällt.

7. Wie groß ist die maximale Kapazität, in der ein String-Typ-Wert gespeichert werden kann?

Antwort: 512M

8. Was ist der Persistenzmechanismus von Redis? Was sind die Vor- und Nachteile jedes einzelnen?

Redis bietet zwei Persistenzmechanismen: RDB- und AOF-Mechanismen: 1), RDBRedis DataBase) Persistenzmodus: Bezieht sich auf die Verwendung von Datensatz-Snapshots (semi-persistenter Modus), um alle Schlüssel-Wert-Paare der Redis-Datenbank zu einem bestimmten Zeitpunkt aufzuzeichnen Zeitpunkt: Die Daten werden in eine temporäre Datei geschrieben. Nach Abschluss der Persistenz wird diese temporäre Datei verwendet, um die letzte persistierte Datei zu ersetzen und eine Datenwiederherstellung zu erreichen. Vorteile: (1) Es gibt nur eine Datei dump.rdb, was für die Persistenz praktisch ist. (2) Gute Katastrophentoleranz, eine Datei kann auf einer sicheren Festplatte gespeichert werden. (3) Um die Leistung zu maximieren, verzweigen Sie den untergeordneten Prozess, um den Schreibvorgang abzuschließen, und lassen Sie den Hauptprozess weiterhin Befehle verarbeiten, sodass die E/A maximiert wird. Verwenden Sie einen separaten Unterprozess für die Persistenz, und der Hauptprozess führt keine E/A-Vorgänge aus, um die hohe Leistung von Redis sicherzustellen. (4) Wenn der Datensatz groß ist, ist die Starteffizienz höher als bei AOF. Nachteile: geringe Datensicherheit. RDB wird in Intervallen beibehalten. Wenn Redis zwischen der Persistenz fehlschlägt, kommt es zu Datenverlust. Daher ist diese Methode besser geeignet, wenn die Datenanforderungen nicht streng sind. 2) AOFAppend-only-Datei) Persistenzmethode: Bedeutet, dass alle Befehlszeilendatensätze vollständig dauerhaft im Format des Redis-Befehlsanforderungsprotokolls gespeichert und als AOF-Dateien gespeichert werden . Vorteile: (1) Datensicherheit, AOF-Persistenz kann mit dem appendfsync-Attribut konfiguriert werden, wobei jede Befehlsoperation immer in der AOF-Datei aufgezeichnet wird. (2) Schreiben Sie Dateien im Anhängemodus. Selbst wenn der Server mittendrin ausfällt, können Sie das Datenkonsistenzproblem mit dem Tool redis-check-aof lösen. (3) Rewrite-Modus des AOF-Mechanismus. Bevor die AOF-Datei neu geschrieben wird (Befehle werden zusammengeführt und neu geschrieben, wenn die Datei zu groß ist), können Sie einige der Befehle löschen (z. B. „flushall“). Nachteile: (1) AOF-Dateien sind größer als RDB-Dateien und Die Wiederherstellungsgeschwindigkeit ist langsam. (2) Wenn der Datensatz groß ist, ist die Starteffizienz geringer als bei RDB.

9. Redis häufige Leistungsprobleme und Lösungen:

(1) Der Master schreibt am besten keine Speicher-Snapshots. Wenn der Master Speicher-Snapshots schreibt, plant der Speicherbefehl die rdbSave-Funktion, die die Arbeit des Hauptthreads blockiert. Wenn der Snapshot relativ groß ist, ist die Auswirkung auf die Leistung sehr groß groß, und der Dienst wird zeitweise angehalten (2) Wenn die Daten wichtig sind, sollte ein Slave AOF-Sicherungsdaten aktivieren und die Richtlinie sollte so eingestellt sein, dass sie einmal pro Sekunde synchronisiert wird (3) Für die Geschwindigkeit der Master-Slave-Replikation und die Stabilität der Verbindung, es ist am besten, wenn sich Master und Slave im selben LAN befinden. (4) Vermeiden Sie es, Slaves unter großem Druck zur Master-Bibliothek hinzuzufügen. (5) Verwenden Sie keine Diagrammstruktur für die Master-Slave-Replikation. Es Stabiler ist die Verwendung einer einseitig verknüpften Listenstruktur, d der Sklave. Wenn der Master auflegt, können Sie Slave1 sofort als Master aktivieren und alles andere unverändert lassen.

10. Was ist die Löschstrategie für abgelaufene Redis-Schlüssel?

(1) Geplantes Löschen: Erstellen Sie beim Festlegen der Ablaufzeit des Schlüssels einen Timer (Timer). Lassen Sie den Timer den Löschvorgang für den Schlüssel sofort ausführen, wenn die Ablaufzeit des Schlüssels erreicht ist.

(2) Verzögertes Löschen: Lassen Sie den Schlüssel trotzdem ablaufen. Überprüfen Sie jedoch jedes Mal, wenn Sie einen Schlüssel aus dem Schlüsselraum erhalten, ob der erhaltene Schlüssel abgelaufen ist. Wenn er abgelaufen ist, löschen Sie den Schlüssel. Wenn er nicht abgelaufen ist, geben Sie den Schlüssel zurück .

(3) Regelmäßiges Löschen: Das Programm überprüft die Datenbank von Zeit zu Zeit und löscht die darin enthaltenen abgelaufenen Schlüssel. Es liegt am Algorithmus, zu entscheiden, wie viele abgelaufene Schlüssel gelöscht und wie viele Datenbanken überprüft werden sollen.

11. Redis-Recyclingstrategie (Eliminierungsstrategie)?

volatile-lru: Wählen Sie die zuletzt verwendeten Daten aus dem Datensatz mit festgelegter Ablaufzeit (server.db[i].expires) aus, um sie zu entfernen. volatile-ttl: Entfernen Sie den Datensatz mit festgelegter Ablaufzeit (server.db[i]. läuft ab), um die Daten zu entfernen, die ablaufen volatile-random: Wählen Sie alle Daten aus dem Datensatz (server.db[i].expires) aus, die die Ablaufzeit zum Entfernen festgelegt haben allkeys-lru: Aus dem Datensatz (server.db[i].expires). [i] .dict) Wählen Sie die zuletzt verwendeten Daten aus, um allkeys-random zu eliminieren: Wählen Sie zufällig Daten aus dem Datensatz aus (server.db[i].dict), um No-Enviction (Räumung) zu eliminieren: Verbieten Sie die Räumung von Daten. Bezahlen Beachten Sie hier die 6 Mechanismen. Volatile und Allkeys legen fest, ob Daten für Datensätze mit festgelegten Ablaufzeiten oder Daten aus allen Datensätzen entfernt werden sollen. Die folgenden lru, ttl und random sind drei verschiedene Eliminierungsstrategien sowie eine No-Enviction-Strategie wird niemals recycelt werden.

Richtlinienregeln verwenden:

(1) Wenn die Daten eine Potenzgesetzverteilung aufweisen, d. h. einige Daten haben eine hohe Zugriffshäufigkeit und andere eine niedrige Zugriffshäufigkeit, verwenden Sie allkeys-lru

(2) Wenn die Daten gleichmäßig verteilt sind, das heißt, alle Datenzugriffshäufigkeiten gleich sind, verwenden Sie Allkeys-Random

12. Warum muss Edis alle Daten im Speicher ablegen?

Antwort: 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 verwendete Speicher eingestellt ist, können keine neuen Werte eingefügt werden, nachdem die Anzahl der vorhandenen Datensätze das Speicherlimit erreicht hat.

13. Verstehen Sie den Synchronisationsmechanismus von Redis?

Antwort: Redis kann Master-Slave-Synchronisation und Slave-Slave-Synchronisation verwenden. Während der ersten Synchronisierung führt der Primärknoten eine BGSAVE-Operation durch und zeichnet nachfolgende Änderungsvorgänge im Speicherpuffer auf. Nach Abschluss wird die gesamte RDB-Datei mit dem Replikatknoten synchronisiert. Nachdem der Replikatknoten die Daten akzeptiert hat, lädt er das RDB-Image in die Erinnerung. Nach Abschluss des Ladevorgangs wird der Masterknoten benachrichtigt, die während des Zeitraums geänderten Vorgangsdatensätze zur Wiedergabe mit dem Replikatknoten zu synchronisieren, und der Synchronisierungsprozess ist abgeschlossen.

14. Was sind die Vorteile von Pipeline? Warum Pipeline verwenden?

Antwort: Die Zeit mehrerer IO-Roundtrips kann auf einen reduziert werden, sofern kein kausaler Zusammenhang zwischen den von der Pipeline ausgeführten Anweisungen besteht. Bei der Verwendung von Redis-Benchmark für Stresstests kann festgestellt werden, dass die Anzahl der Pipeline-Batch-Anweisungen ein wichtiger Faktor ist, der den QPS-Spitzenwert von Redis beeinflusst.

15. Haben Sie jemals Redis-Cluster verwendet? Was ist das Cluster-Prinzip?

(1) Redis Sentinal konzentriert sich auf hohe Verfügbarkeit. Wenn der Master ausfällt, wird der Slave automatisch zum Master heraufgestuft und stellt weiterhin Dienste bereit.

(2) Redis-Cluster konzentriert sich auf Skalierbarkeit. Wenn ein einzelner Redis-Speicher nicht ausreicht, wird Cluster für Shard-Speicher verwendet.

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

Antwort: 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 Steckplätzen im Bereich von 5501–11000 mangelt, und ist nicht verfügbar.

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

Antwort: Redisson, Jedis, Salat usw. Redisson wird offiziell empfohlen.

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

Antwort: Jedis ist ein von Redis in Java implementierter Client. Seine API bietet relativ umfassende Unterstützung für Redis-Befehle. Redisson implementiert verteilte und skalierbare Java-Datenstrukturen. Im Vergleich zu Jedis sind seine Funktionen einfacher und unterstützen keine Zeichenfolgen. Operationen, Redis-Funktionen wie Sortieren, Transaktionen, Pipelines und Partitionen werden nicht unterstützt. 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.

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

Passwort festlegen: config set requirepass 123456 Autorisierungspasswort: auth 123456

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

Antwort: Der Redis-Cluster verwendet kein konsistentes Hashing, sondern führt das Konzept der Hash-Slots ein. Der Redis-Cluster verfügt über 16384 Hash-Slots. Jeder Schlüssel wird von CRC16 überprüft und Modulo 16384 wird verwendet, um zu bestimmen, welcher Slot platziert werden soll. Jeder Schlüssel im Cluster, jeder Knoten ist für einen Teil des Hash-Slots verantwortlich.

Dieser Artikel wurde von der Blog-Post-Plattform OpenWrite veröffentlicht!

Tang Xiaoou, Gründer von SenseTime, ist im Alter von 55 Jahren verstorben Im Jahr 2023 stagniert PHP Wi-Fi 7 wird vollständig verfügbar sein Anfang 2024 Debüt, fünfmal schneller als Wi-Fi 6 Das Hongmeng-System steht kurz vor der Unabhängigkeit und viele Universitäten haben „Hongmeng-Klassen“ eingerichtet Zhihui Das Startup-Unternehmen von Jun refinanziert sich, der Betrag übersteigt 600 Millionen Yuan und die Pre-Money-Bewertung beträgt 3,5 Milliarden Yuan Quark Browser PC-Version startet interne Tests KI-Code-Assistent ist beliebt, und Programmiersprachen-Rankings sind alle Es gibt nichts, was Sie tun können Das 5G-Modem und die Hochfrequenztechnologie des Mate 60 Pro liegen weit vorne MariaDB spaltet SkySQL auf und etabliert sich als unabhängiges Unternehmen Xiaomi antwortet auf Yu Chengdongs „Keel Pivot“-Plagiatsaussage von Huawei
{{o.name}}
{{m.name}}

Supongo que te gusta

Origin my.oschina.net/u/5587102/blog/10149561
Recomendado
Clasificación