Heim  >  Artikel  >  Datenbank  >  Analysieren Sie das Redis-Prinzip und die Implementierung

Analysieren Sie das Redis-Prinzip und die Implementierung

藏色散人
藏色散人nach vorne
2020-10-22 17:55:342469Durchsuche

Die folgende Kolumne stellt Ihnen Redis-TutorialAnalyse des Redis-Prinzips und der Implementierung vor. Ich hoffe, es wird Freunden in Not hilfreich sein! 1 Was ist Redis? Standard für MySQL, es gibt verschiedene Implementierungsklassen, die es implementieren. Die, die wir häufig verwenden, ist Druid. Für Redis verwenden wir normalerweise Jedis (das uns auch den Verbindungspool JedisPool bereitstellt). In Redis ist der Schlüssel byte[] (String) Datenstruktur (Wert) von Redis:

String, Liste, Set, Orderset, Hash

2 Verwendung von Redis


Redis zuerst installieren, dann ausführen, Abhängigkeiten in die POM-Datei einführen und Abhängigkeiten hinzufügen zu der Klasse, die Sie verwenden möchten Redis-Cache Die Datei „mapper.xml“ konfiguriert den vollständig qualifizierten Namen von Redis. Führen Sie die redis.properties-Datei von redis ein (Sie können sie verwenden, wenn Sie die Konfiguration ändern möchten).
Anwendungsszenario:

String:

1 speichert Objekte vom Typ JSON, 2 Zähler, 3 Youku-Video-Likes usw.

Liste (doppelt verknüpfte Liste)

1 kann verwendet werden. Die Liste von Redis simuliert Warteschlange, Heap, Stapel

2 Moments-Likes (eine Moments-Inhaltsangabe, mehrere Likes-Anweisungen)

legt fest: Format des Moments-Inhalts:


1, Inhalt: Benutzer:x: post:x Inhalt zum Speichern;

2, wie: post:x:gute Liste zum Speichern; (nehmen Sie den entsprechenden Avatar heraus und zeigen Sie ihn an)

Hash (Hashmap)

1 Speichern Sie das Objekt

2 Gruppe

3 String und Hash Der Datenunterschied

Bei der Übertragung über das Netzwerk muss es serialisiert werden, bevor es über das Netzwerk übertragen werden kann. Bei Verwendung des String-Typs muss es dann serialisiert werden, und der Hash muss ebenfalls serialisiert werden serialisiert, daher kann beim Speichern viel Hash gespeichert werden, bei der Deserialisierung ist die Deserialisierung von Zeichenfolgen jedoch relativ gering und die Serialisierung und Deserialisierung von Hash ist relativ Komplizierter ist es, wenn die Daten je nach Geschäftsszenario häufig geändert werden. Wenn die Daten nicht häufig geändert werden, können Sie Hash verwenden, da Hash umfangreicher ist und eine Vielzahl von Daten speichern kann vom Datentyp

4 Redis-Persistenzmethode:

kann die Daten im Speicher asynchron auf die Festplatte schreiben, zwei Methoden: RDB (Standard) und AOF

RDB-Persistenzprinzip: Wird dann durch den Befehl bgsave ausgelöst Der übergeordnete Prozess führt eine Fork-Operation aus, um einen untergeordneten Prozess zu erstellen, und der untergeordnete Prozess erstellt eine RDB-Datei, generiert eine temporäre Snapshot-Datei basierend auf dem Speicher des übergeordneten Prozesses und führt nach Abschluss eine atomare Ersetzung der Originaldatei durch (alle Snapshots).

Vorteile: Es handelt sich um eine kompakte und komprimierte Binärdatei, die RDB lädt, um Daten viel schneller wiederherzustellen als AOF.

Nachteile: Aufgrund des großen Overheads der RDB-Generierung jedes Mal und der Nicht-Echtzeit-Persistenz,

AOF-Persistenzprinzip: Nach dem Einschalten fügt Redis jedes Mal, wenn es einen Befehl zum Ändern von Daten ausführt, diesen Befehl hinzu die AOF-Datei.

Vorteile: Echtzeit-Persistenz.

Nachteile: Daher wird die AOF-Dateigröße allmählich größer und es müssen regelmäßig Umschreibvorgänge durchgeführt werden, um die Dateigröße zu reduzieren. Das Laden ist langsam.

5 Warum ist Redis so schnell Single-Threaded? Redis ist Single -threaded, aber warum ist es immer noch so schnell? Nun,

Grund 1: Einzelner Thread, vermeidet Konkurrenz zwischen Threads

Grund 2: Es befindet sich im Speicher und verwendet Speicher, was die Festplattennutzung reduzieren kann

Grund 3: Multiplexing-Modell , mit Puffer Das Konzept wird durch das Selektormodell implementiert

6 So betreiben Sie Redis, wenn der Master ausgefallen ist

Redis bietet einen Sentinel-Modus. Wenn der Master ausgefallen ist, können Sie andere auswählen, um ihn zu ersetzen Im Sentinel-Modus werden drei geplante Aufgaben überwacht.  6.1 Alle 10 Sekunden sendet jeder S-Knoten (Sentinel-Knoten) den Info-Befehl an den Master-Knoten und den Slave-Knoten, um die neueste Topologiestruktur zu erhalten.

 6.2 Alle 2 Sekunden sendet jeder S-Knoten dies Senden Sie die Informationen des S-Knotens an einen bestimmten Kanal. Die Beurteilung des Master-Knotens und die Informationen des aktuellen Sl-Knotens.

 Gleichzeitig abonniert jeder Sentinel-Knoten auch diesen Kanal, um mehr über andere S-Knoten und deren Beurteilung zu erfahren des Master-Knotens (als objektive Grundlage für Offline)

 6.3 Alle 1 Sekunden sendet jeder S-Knoten einen Ping-Befehl an den Master-Knoten, den Slave-Knoten und andere S-Knoten für eine Heartbeat-Erkennung (Heartbeat-Erkennungsmechanismus), um zu bestätigen, ob Diese Knoten sind derzeit erreichbar

Nach drei Heartbeat-Erkennungen wird abgestimmt. Wenn mehr als die Hälfte der Stimmen eingeht, wird der Knoten als Master betrachtet

7 Redis-Cluster

Der Redis-Cluster stellt Ruby bereit Skripte für die Konstruktion nach 3.0, Einführung des Konzepts der Rauheit,

 Knoten im Redis-Cluster realisieren die Knotenkommunikation über Ping/Pong-Nachrichten. Die Nachrichten können nicht nur Knoten-Slot-Informationen weitergeben, sondern auch andere Status wie: Master-Slave-Status, Knotenausfall usw. Daher wird die Fehlererkennung auch durch den Nachrichtenverbreitungsmechanismus realisiert. Zu den Hauptverbindungen gehören: subjektiver Offline-Modus (pfail) und objektiver Offline-Modus (fail):

Subjektiver Offline-Modus: Jeder Knoten im Cluster meldet sich regelmäßig Knoten Eine Ping-Nachricht wird gesendet und der empfangende Knoten antwortet mit einer Pong-Nachricht. Wenn die Kommunikation weiterhin fehlschlägt, markiert der sendende Knoten den empfangenden Knoten als subjektiv offline (pfail).

 Ziel offline: Wenn mehr als die Hälfte der Knoten offline sind, ist der Masterknoten objektiv offline

 Der Masterknoten wählt einen bestimmten Masterknoten als Leiter für das Failover.

  Failover (wählen Sie den Slave-Knoten als neuen Master-Knoten)


8 Speichereliminierungsstrategie

Die Speichereliminierungsstrategie von Redis bezieht sich auf die Handhabung neuer Schreibvorgänge und die Notwendigkeit, zusätzliche Ressourcen zu beantragen, wenn der Speicher von Redis für das Caching nicht ausreicht. Geodaten.

noeviction: Wenn der Speicher nicht ausreicht, um die neu geschriebenen Daten aufzunehmen, meldet der neue Schreibvorgang einen Fehler.

allkeys-lru: Wenn der Speicher nicht ausreicht, um neu geschriebene Daten aufzunehmen, entfernen Sie im Schlüsselbereich den zuletzt verwendeten Schlüssel.

allkeys-random: Wenn der Speicher nicht ausreicht, um neu geschriebene Daten aufzunehmen, wird ein Schlüssel zufällig aus dem Schlüsselraum entfernt.

volatile-lru: Wenn der Speicher nicht ausreicht, um neu geschriebene Daten aufzunehmen, entfernen Sie im Schlüsselbereich mit festgelegter Ablaufzeit den zuletzt verwendeten Schlüssel.

volatil-zufällig: Wenn der Speicher nicht ausreicht, um neu geschriebene Daten aufzunehmen, wird ein Schlüssel zufällig mit einer festgelegten Ablaufzeit aus dem Schlüsselraum entfernt.

volatile-ttl: Wenn der Speicher nicht ausreicht, um neu geschriebene Daten aufzunehmen, werden im Schlüsselraum mit festgelegter Ablaufzeit zuerst Schlüssel mit einer früheren Ablaufzeit entfernt.


9 Lösung für Cache-Aufschlüsselung:

Grund: Wenn andere Daten anfordern, können viele Daten nicht im Cache abgefragt werden.

Lösung: Es können nur relevante Daten abgefragt werden. Abfrage-Cache, wenn Es handelt sich um eine spezielle Datenbankabfrage.

Sie können auch den Bloom-Filter zum Abfragen verwenden.

10 Cache-Lawinenlösung:

Ursache der Cache-Lawine: Dem Cache werden zu viele Daten auf einmal hinzugefügt, was dazu führt, dass der Speicher zu hoch ist , was sich auf die Speichernutzung auswirkt und Dienstausfallzeiten verursacht

 Lösung:

 1 Redis-Cluster, Platzieren von Daten durch Clustering

 2 Verschlechterung des Back-End-Dienstes und Strombegrenzung: Wenn eine Schnittstelle zu viele Anforderungen hat, werden zu viele Daten vorhanden sein hinzugefügt werden. Sie können den Fluss des Dienstes und die Anzahl der Zugriffe begrenzen, um das Auftreten von Problemen zu reduzieren

Das obige ist der detaillierte Inhalt vonAnalysieren Sie das Redis-Prinzip und die Implementierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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