1.Wie führt Redis eine Speicheroptimierung durch?
Verwenden Sie Hash-Tabellen so oft wie möglich (was bedeutet, dass die in der Hash-Tabelle gespeicherte Anzahl sehr klein ist). Daher sollten Sie Ihr Datenmodell so weit wie möglich in eine Hash-Tabelle abstrahieren.
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.
2. 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 die 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, wodurch das Herunterladen neuer E-Mails vom Server erheblich beschleunigt wird.
3. 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, ConcurrentMap, List, ListMultimap), Queue, BlockingQueue einfach in einer verteilten Umgebung zu implementieren , Deque, BlockingDeque, Semaphore, Lock, ReadWriteLock, AtomicLong, CountDownLatch, Publish/Subscribe, HyperLogLog).
4. 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 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 keine Verringerung der Seitenladegeschwindigkeit feststellen. Dies ist eine große Verbesserung, ähnlich wie beim lokalen PHP-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.
(3) Warteschlange
Einer der großen Vorteile von 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) Ranking/Zähler
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.
Wir möchten also die Top-10-Benutzer aus der sortierten Menge erhalten – nennen wir sie „user_scores“. Wir müssen es nur wie folgt tun: Dies setzt natürlich voraus, dass Sie basierend auf Ihren Benutzer-Scores sortiert sind aufsteigende Reihenfolge. 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 WITHSCORES
Agora Games ist ein gutes Beispiel, das in Ruby implementiert ist und dessen Rankings Redis zum Speichern von Daten verwenden kann es hier sehen.
(5) 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-/Abonnement-Funktionalität von Redis verwenden!
5. Es gibt 20 Millionen Daten in MySQL, aber nur 20 Millionen Daten werden in Redis gespeichert.
redis Wenn die Größe des Speicherdatensatzes eine bestimmte Größe erreicht, wird die Dateneliminierungsstrategie implementiert.
Tatsächlich legen viele Unternehmen neben der Prüfung von Redis in Interviews großen Wert auf Technologien mit hoher Parallelität und hoher Verfügbarkeit, insbesondere auf First-Line-Internet-Wissenspunkte wie verteilt,
JVM, Spring-Quellcode-Analyse, und Microservices sind zu obligatorischen Interviewfragen geworden.
6. 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 mehr verfügbar ist.
7. Was ist mit der Redis-Clusterlösung zu tun? Was sind die Pläne?
codis
Die derzeit am häufigsten verwendete Clusterlösung hat im Grunde den gleichen Effekt wie Twemproxy, unterstützt jedoch die Wiederherstellung alter Knotendaten auf neuen Hash-Knoten, wenn sich die Anzahl der Knoten ändert. Der Cluster, der mit
redis-Cluster
3.0 geliefert wird, zeichnet sich dadurch aus, dass sein verteilter Algorithmus kein konsistentes Hashing ist, sondern das Konzept von Hash-Slots, und er unterstützt 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 Bearbeiten 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.
8.Was sind die internen Codierungen von Redis String?
int, embstr, raw
Ganzzahlen unter 10000 verwenden die int-Konstante im Cache.
Länge kleiner oder gleich 44 Bytes: Embstr-Kodierung
Länge größer als 44 Bytes: Rohkodierung
9 Verwenden Sie Redis als Verzögerungswarteschlange. Wie implementiert man es konkret?
Kann mit Zset implementiert werden. Mitglied ist die Aufgabenbeschreibung, Punktzahl ist die Ausführungszeit, und dann wird ein Timer zum regelmäßigen Scannen verwendet. Sobald eine Aufgabe vorhanden ist, deren Ausführungszeit kleiner oder gleich der aktuellen Zeit ist, wird sie sofort ausgeführt.
10. Wie findet Redis den spezifischen Knoten bei der Suche nach Schlüsseln im Cluster?
Verwenden Sie den crc16-Algorithmus, um den Schlüssel zu hashen, nehmen Sie den Hash-Wert Modulo 16384 und erhalten Sie die spezifischen Slot-Mapping-Informationen basierend auf Knoten und Slot (nachdem der Client eine Verbindung mit dem Cluster hergestellt hat, kann er die Slot-Mapping-Informationen erhalten). Um den bestimmten Steckplatz zu finden, wird der Schlüssel an den bestimmten Knoten gesendet. Wenn sich der Schlüssel nicht auf diesem Knoten befindet, gibt der Redis-Cluster den verschobenen Befehl zurück und fügt dem Client gleichzeitig die neue Knotenadresse hinzu , aktualisiert der Client die Slot-Zuordnungsbeziehung des lokalen Knotens. Während der Migration sendet der Redis-Cluster Anweisungen an den Client. Dies ist eine vorübergehende Korrektur . Haben Sie die Beständigkeit von Redis verstanden?
Redis-Persistenz verfügt über zwei Methoden: RDB und AOF.
RDB: Datenbank-Snapshot in binärer Form auf der Festplatte speichern. AOF: Zeichnen Sie alle in die Datenbank geschriebenen Befehle und Parameter in Form eines Protokolltexts in der AOF-Datei auf und zeichnen Sie so den Datenbankstatus auf.12. Unter welchen Umständen löst Redis das Schlüsselrecycling aus?
Zwei Situationen: 1. Regelmäßige (Abtast-)Reinigung. 2. Stellen Sie beim Ausführen des Befehls fest, ob der Speicher den maximalen Speicher überschreitet.
13. Was sind die Eliminierungsstrategien für den Redis-Schlüssel?
8 Typen: noeviction, volatile-lru, volatile-lfu, volatile-ttl, volatile-random, allkeylru, allkeys-lfu, allkeys-random
14 Haben Sie den Redis-Transaktionsmechanismus verstanden?
Das Konzept der Redis-Transaktion: Die Essenz der
Redis-Transaktion ist eine Reihe von Befehlen. Transaktionen unterstützen die gleichzeitige Ausführung mehrerer Befehle und alle Befehle in einer Transaktion werden serialisiert. Während des Transaktionsausführungsprozesses werden die Befehle in der Warteschlange der Reihe nach ausgeführt, und von anderen Clients übermittelte Befehlsanforderungen werden nicht in die Befehlssequenz zur Transaktionsausführung eingefügt. Redis-Transaktion ist eine einmalige, sequentielle und exklusive Ausführung einer Reihe von Befehlen in einer Warteschlange. Redis-Transaktionen haben kein Konzept der Isolationsstufe: Batch-Vorgänge werden vor dem Senden des EXEC-Befehls in den Warteschlangen-Cache gestellt und nicht tatsächlich ausgeführt. Daher gibt es innerhalb der Transaktion keine Abfrage, um die Aktualisierungen in der Transaktion anzuzeigen. außerhalb der Transaktion Die Abfrage ist nicht sichtbar. Redis garantiert keine Atomizität: In Redis wird ein einzelner Befehl atomar ausgeführt, Transaktionen garantieren jedoch keine Atomizität und es gibt kein Rollback. Wenn ein Befehl in der Transaktion nicht ausgeführt werden kann, werden die verbleibenden Befehle trotzdem ausgeführt. Drei Phasen der Redis-Transaktion: Transaktion starten Befehl in die Warteschlange stellen Transaktion ausführen Redis-Transaktionsbezogene Befehle: Beobachten Sie Schlüssel1, Schlüssel2 ...: Überwachen Sie einen oder mehrere Schlüssel, wenn vor der Ausführung der Transaktion die Wird der überwachte Schlüssel durch andere Befehle geändert, wird die Transaktion unterbrochen (ähnlich wie beim optimistischen Sperren). Die hinzugefügten Überwachungssperren werden aufgehoben.) discard: Brechen Sie die Transaktion ab und verwerfen Sie alle Befehle im Transaktionsblock. unwatch: Brechen Sie die Überwachung aller Schlüssel ab. 15. Was soll ich tun, wenn ich Redis zum Zählen der UV-Werte verwende? die Website?UV unterscheidet sich von PV, UV muss dedupliziert werden. Im Allgemeinen gibt es zwei Lösungen:
1. Verwenden Sie BitMap. Gespeichert wird die UID des Benutzers. Bei der UV-Berechnung reicht es aus, die Bitanzahl zu ermitteln.
2. Bloom-Filter verwenden. Geben Sie die Benutzer-UID jedes Besuchs in den Bloom-Filter ein. Der Vorteil besteht darin, dass Speicherplatz gespart wird, der Nachteil besteht jedoch darin, dass keine genaue UV-Strahlung erzielt werden kann. Es ist jedoch eine gute Wahl für Szenen, in denen Sie die spezifische UV-Strahlung nicht genau kennen müssen, sondern nur eine grobe Größenordnung benötigen.
16. Wie gehe ich mit großen Schlüsseln in Redis um?
Großer Schlüssel bezeichnet einen Schlüssel mit einem besonders großen Wert. Zum Beispiel eine sehr lange Zeichenfolge oder ein großer Satz usw. Große Schlüssel verursachen zwei Probleme:
1. Datenversatz, beispielsweise ist die Speichernutzung einiger Knoten zu hoch.
2. Wenn ein großer Schlüssel gelöscht wird oder ein großer Schlüssel automatisch abläuft, führt dies zu einem plötzlichen Abfall der QPS, da Redis Single-Threaded ist.
Lösung: Ein großer Schlüssel kann fragmentiert werden, beispielsweise kann ein großer Satz in mehrere kleine Sätze aufgeteilt werden.
17. Wie gehe ich mit Hotkeys in Redis um?
1. Hotkeys verteilen. Beispiel: Fügen Sie dem Schlüssel verschiedene Suffixe hinzu und speichern Sie mehrere Schlüssel zwischen, sodass jeder Schlüssel an verschiedene Knoten verteilt wird.
2. Verwenden Sie mehrstufiges Caching.
18. Cache ungültig? Cache-Penetration? Cache-Lawine? Cache-Parallelität?
Cache-Invalidierung Cache-Invalidierung bedeutet, dass eine große Anzahl von Caches gleichzeitig ausfällt und der sofortige Druck auf die Datenbank steigt. Der Grund für dieses Phänomen liegt darin, dass die Ablaufzeit der Schlüssel auf den gleichen Wert eingestellt ist. Die Lösung besteht darin, zufällige Faktoren in die Ablaufzeit des Schlüssels einzuführen, beispielsweise 5 Minuten + zufällige Sekunden.
Cache-Penetration bezieht sich auf die Abfrage von Daten, die sich weder in der Datenbank noch im Cache befinden. Die Datenbank wird immer abgefragt, und der Zugriffsdruck auf die Datenbank erhöht sich. Es gibt zwei Lösungen für die Cache-Penetration Leeres Objekt: Die Codepflege ist einfacher, aber der Effekt ist nicht gut. Bloom-Filter: komplexe Codepflege, aber sehr effektiv.
Cache-Lawine Unter Cache-Lawine versteht man den zentralisierten Ablauf von Caches in einem bestimmten Zeitraum. In diesem Moment umgehen unzählige Anfragen direkt den Cache und fordern direkt die Datenbank an. Es gibt zwei Gründe für die Cache-Lawine: Ausfallzeiten. Die meisten Daten sind ungültig.
Es gibt zwei Lösungen zum Zwischenspeichern von Lawinen:
Erstellen Sie einen Hochverfügbarkeitscluster, um Ausfallzeiten bei Redis auf einer einzelnen Maschine zu verhindern.
Stellen Sie unterschiedliche Ablaufzeiten ein, um zu verhindern, dass eine große Anzahl von Schlüsseln innerhalb der Einwilligungsfrist ungültig wird.
Cache-Parallelität Wenn auf die Website häufig gleichzeitig zugegriffen wird und ein Cache ausfällt, fragen möglicherweise mehrere Prozesse gleichzeitig die Datenbank ab und richten den Cache gleichzeitig ein. Wenn die Parallelität sehr groß ist, kann dies ebenfalls zu übermäßigem Zugriff führen Druck auf die Datenbank und den Cache. Häufige Aktualisierungsprobleme. Die allgemeine Lösung besteht darin, die Datenbank zu sperren, wenn sie nicht vorhanden ist, sie dann zu überprüfen und in den Cache zu legen und sie dann zu entsperren, wenn andere Prozesse feststellen, dass eine Sperre vorhanden ist Warten Sie dann, bis es entsperrt ist, bevor Sie den Cache überprüfen oder die DB-Abfrage eingeben.
19. 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.
20. Wie lege ich ein Passwort fest und verifiziere es in Redis?
Passwort festlegen: config set requirepass 123456
Autorisierungspasswort: auth 123456
21 Warum muss Redis alle Daten im Speicher ablegen?
Redis liest alle Daten in den Speicher, um die schnellste Lese- und Schreibgeschwindigkeit zu erreichen, und schreibt 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 der Speicher heute immer billiger wird, wird Redis immer beliebter. Wenn der maximal verwendete Speicher festgelegt ist, können keine neuen Werte eingefügt werden, nachdem die Anzahl der vorhandenen Datensätze das Speicherlimit erreicht hat.
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. Ist Redis Single-Threaded oder Multi-Threaded?
Redis6.0 verwendet Multithread-E/A, die Ausführung von Befehlen erfolgt jedoch weiterhin Single-Threaded.
Vor Redis 6.0 waren der E/A-Thread und der Ausführungsthread beide Single-Threaded.
24. Warum ist Redis so schnell?
1. Speicherbetrieb;
2. Der Overhead durch Thread-Wechsel und Sperren-Konkurrenz entfällt.
3.
25. Was ist die maximale Kapazität, die ein String-Typ-Wert speichern kann?
512M
26. Wie lautet der vollständige Name von Redis?
Remote-Wörterbuchserver.
27.Welche physischen Ressourcen verbraucht Redis hauptsächlich?
Speicher.
28.Welche Datenstrukturen hat Redis?
Redis verfügt über 5 grundlegende Datenstrukturen: String (String), Liste (Liste), Hash (Wörterbuch), Set (Set) und Zset (geordnete Menge).
Diese 5 sind die grundlegendsten und wichtigsten Teile des Redis-bezogenen Wissens.
29.Was sind die Vorteile von Redis im Vergleich zu Memcached?
(1) Alle Werte in Memcached sind einfache Zeichenfolgen. Als Ersatz unterstützt Redis umfangreichere Datentypen.
(2) Redis ist viel schneller als Memcached. (3) Redis kann seine Daten dauerhaft transformieren
30. 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 im Speicher geladen und betrieben, 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 Schlüsselwert-Datenbank mit bekannter Leistung.
Die Exzellenz von Redis liegt nicht nur in seiner Leistung. Der größte Reiz von Redis besteht darin, dass es das Speichern verschiedener 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.
Empfohlenes Lernen: „Redis-Video-Tutorial“
Das obige ist der detaillierte Inhalt vonEine Zusammenfassung von 30 häufig gestellten Fragen zu Redis!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!