Technologieaustausch

Redis-Konfiguration und -Optimierung

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Relationale Datenbanken und nicht relationale Datenbanken

(1) Relationale Datenbank

Eine relationale Datenbank ist eine strukturierte Datenbank, die auf einer relationalen Modelldatenbank basiert und datensatzorientiert erstellt wird.

Gängige relationale Datenbanken: Oracle, MySQL, SQL Server, Microsoft Access, DB2.

(2) Nicht relationale Datenbank

NOSQL=Not Only SQL ist der allgemeine Begriff für nicht relationale Datenbanken. Abhängig von der Speichermethode, der Speicherstruktur und den Verwendungsszenarien spricht man von einer nicht relationalen Datenbank. Andere Datenbanken als die gängigen relationalen Datenbanken können als nicht relationale Datenbanken bezeichnet werden.

Gängige nicht relationale Datenbanken: Redis, MongoDB, Hbase, CouhDB.

2. Redis-Grundlagen

(1) Einführung in Redis

Redis ist eine in der Sprache C geschriebene Open-Source-Nosql-Datenbank. Sie wird speicherbasiert ausgeführt und unterstützt die Speicherform Schlüssel-Wert-Paar. Seine Portnummer ist 6379.

(2) Vorteile von Redis

  1. Hat eine hohe Datenlese- und Schreibgeschwindigkeit.
  2. Unterstützt umfangreiche Datentypen. Schlüsselwert, Zeichenfolgen, Listen, Hashes, Mengen, geordnete Mengen.
  3. Unterstützen Sie die Datenpersistenz. Die Daten werden auf der Festplatte gespeichert und können nach einem Neustart geladen und verwendet werden.
  4. Atomar.
  5. Unterstützt Datensicherung.

3. Redis-Installation

1. Installieren Sie Redis

[root@localhost ~]# systemctl stoppe Firewall

[root@localhost ~]# setenforce 0

[root@localhost ~]# yum -y installiere gcc* zlib-devel

[root@localhost ~]tar xvzf redis-4.0.9.tar.gz

[root@localhost ~]cd redis-4.0.9/

[root@localhost redis-4.0.9]# machen

Beachten:

Nach dem Erstellen wird eine Fehlermeldung generiert.

Lösung:
Lösung 1: Verwenden Sie make MALLOC=libc, um den Speicherzuweiser anzugeben, der für libc kompiliert werden soll
Lösung 2: make clean && make distclean

[root@localhost redis-4.0.9]# make PREFIX=/usr/local/redis installieren
[root@localhost-Dienstprogramme]# ln -s /usr/local/redis/bin/* /usr/local/bin/

[root@localhost redis-4.0.9]# cd utils/
Darunter: install_server.sh ist das Initialisierungsskript

[root@localhost-Dienstprogramme]# ./install_server.sh
Bitte wählen Sie den ausführbaren Pfad für Redis [] /usr/local/redis/bin/redis-server(ausführbaren Pfad angeben)

Prozess- und Servicekontrolle anzeigen
[root@localhost-Dienstprogramme]# netstat -anpt | grep redis
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 5360/Redis-Server 1
[root@localhost utils]# /etc/init.d/redis_6379 stoppen(Redis ist geschlossen)
[root@localhost utils]# /etc/init.d/redis_6379 starten(An)
[root@localhost-Dienstprogramme]# /etc/init.d/redis_6379 status (Zustand)

Änderung von Konfigurationsparametern
[root@localhost ~]#vim /etc/redis/6379.conf
binden 127.0.0.1 192.168.10.101//Hostadresse abhören
Port 6379 //Hafen
dämonisieren ja //Daemon-Prozess aktivieren
pid-Datei /var/run/redis_6379.pid //PID-Datei angeben
Loglevel-Hinweis//Protokollebene
Protokolldatei /var/log/redis_6379.log//Protokolldatei angeben

[root@localhost~]#/etc/init.d/redis_6379 Neustart

2. Redis-Befehlstool

[root@localhost-Dienstprogramme]# redis-cli(Lokale Anmeldung)
[root@localhost-Dienstprogramme]# redis-cli -h 192.168.10.101 -p 6379(Fernanmeldung)
192.168.10.101:6379> Klingeln(Der Erkennungsdienst läuft normal)
PONG

3: Redis-Benchmark-Testtool

redis-benchmark ist das offizielle Redis-Leistungstesttool, mit dem die Leistung von Redis-Diensten effektiv getestet werden kann.

  • -h: Geben Sie den Hostnamen des Servers an.
  • -p: Geben Sie den Server-Port an.
  • -s: Server-Socket angeben;
  • -c: Geben Sie die Anzahl gleichzeitiger Verbindungen an.
  • -n: Geben Sie die Anzahl der Anfragen an.
  • -d: Geben Sie die Datengröße des SET/GET-Werts in Bytes an;
  • -k: 1 = am Leben erhalten 0 = erneut verbinden;
  • -r: SET/GET/INCR verwendet Zufallsschlüssel, SADD verwendet Zufallswerte;
  • -P: Übertragung per Pipe<numreq> fragen;
  • -q: Beenden von Redis erzwingen. Es werden nur Abfrage-/Sek.-Werte angezeigt.
  • --csv: Ausgabe im CSV-Format;
  • -l: Erzeugen Sie eine Schleife und führen Sie den Test dauerhaft aus.
  • -t: Nur eine durch Kommas getrennte Liste von Testbefehlen ausführen;
  • -I: Ruhemodus. Öffnen Sie nur N freie Verbindungen und warten Sie.
  • (1) Leistung der Testanforderung

    [root@localhost ~]#redis-benchmark -h 192.168.10.101 -p 6379 -c 100 -n 100000

    Anmerkung:

    -h: Geben Sie den Hostnamen des Servers an.

  • -p: Geben Sie den Server-Port an.

    -c: Geben Sie die Anzahl gleichzeitiger Verbindungen an.

    -n: Geben Sie die Anzahl der Anfragen an.

(2) Testen Sie die Zugriffsleistung

[root@localhost ~]#redis-benchmark -h 192.168.10.101 -p 6379 -q -d 100

Anmerkung:

-h: Geben Sie den Hostnamen des Servers an.

-p: Geben Sie den Server-Port an.

-d: Geben Sie die Datengröße des SET/GET-Werts in Bytes an;

-q: Beenden von Redis erzwingen. Es werden nur Abfrage-/Sek.-Werte angezeigt.

  1. 4. Allgemeine Befehle für die Redis-Datenbank

Set speichert den Schlüsselwert des Datenbefehlsformats

get Datenbefehlsformat abrufen Schlüssel abrufen

(1) Tastenbezogene Befehle

1. Schlüssel-Wert-Paare hinzufügen

127.0.0.1:6379&gt; Satz 1 1
OK
127.0.0.1:6379&gt; Satz 2 2
OK
127.0.0.1:6379&gt; Satz 3 3
OK

2. Alle Werte in der Datenbank anzeigen

127.0.0.1:6379&gt; Schlüssel *
1) "3"
2) "1"
3) "2"

3. Zeigen Sie Daten an, die mit v beginnen, in der Datenbank
127.0.0.1:6379>SCHLÜSSEL v*

4. Zeigen Sie alle Daten in der Datenbank an, die mit v beginnen

127.0.0.1:6379>SCHLÜSSEL v?

5.Sehen Sie sich die aktuelle Datenbank an mit gegen AnfangDas Folgende enthält beliebige zweistellige Daten

127.0.0.1:6379>SCHLÜSSEL v??

(2) existiert

Stellen Sie fest, ob der Wert vorhanden ist.

127.0.0.1:6379>existiert f5Bestimmen Sie, ob f5 existiert

(Ganzzahl) 1 Das Ergebnis ist 1, was darauf hinweist, dass die Taste F5 vorhanden ist

wie

(Ganzzahl) 0 Das Ergebnis ist 0, was darauf hinweist, dass die Taste F5 nicht vorhanden ist

(3)del

del Der Befehl kann das angegebene löschen Schlüssel

127.0.0.1:6379> del v5 Löschen Sie v5 in der Datenbank

(Ganzzahl) 1

127.0.0.1:6379>Holen Sie sich v5

(Null)

(4) Typ

verwenden Typ Der Befehl kann abgerufen werden Schlüssel dazugehörigen Wert Werttyp

127.0.0.1:6379>Typ K1

Schnur

Anmerkung:

Von Redis unterstützte Datentypen

  • String: String ist der einfachste Typ, bei dem es sich um ein gewöhnliches Set-and-Get handelt, das für das Zwischenspeichern von Schlüsselwerten verwendet wird.
  • Hash: Hash-Algorithmus, eine Struktur ähnlich der Karte. Im Allgemeinen können strukturierte Daten, z. B. ein Objekt, in Redis zwischengespeichert werden.
  • Liste: Liste ist eine geordnete Liste. Sie können Listen verwenden, um einige Datenstrukturen vom Typ Liste zu speichern, z. B. Fanlisten, Artikelkommentarlisten usw.
  • Set: Set ist eine ungeordnete Sammlung, die Duplikate automatisch entfernt.
  • Sortierter Satz: Sortierter Satz ist ein sortierter Satz, der dedupliziert, aber sortiert werden kann. Beim Einschreiben wird eine Punktzahl angegeben und automatisch nach der Punktzahl sortiert.

(5) umbenennen

umbenennen Der Befehl gilt für eine vorhandene Schlüssel umbenennen

Im tatsächlichen Gebrauch wird die Verwendung empfohlen existiert Befehl zum Anzeigen des Ziels Schlüssel existiert, und entscheiden Sie dann, ob es ausgeführt werden soll umbenennen Befehl, um das Überschreiben wichtiger Daten zu vermeiden.

127.0.0.1:6379>umbenennen v22 v2 Benennen Sie v22 in v2 um

OK

(6) umbenennen

umbenennen Die Funktion des Befehls besteht darin, das Vorhandene zu ändern Schlüssel Führen Sie eine Umbenennung durch und prüfen Sie, ob der neue Name existiert.

verwendenumbenennen Wenn der Befehl umbenannt wird, wenn das Ziel Schlüssel Wenn es existiert, wird es nicht umbenannt.

(7) Datenbankgröße

Datenbankgröße Der Zweck des Befehls besteht darin, die aktuelle Datenbank anzuzeigen Schlüssel Anzahl.

127.0.0.1:6379> Datenbankgröße

(Ganzzahl) 5

5. Allgemeine Befehle für mehrere Datenbanken

(1) Wechseln zwischen mehreren Datenbanken

Redis Standardmäßig ohne Änderungen enthalten 16 Datenbank, der Datenbankname ist eine Zahl 0-15 der Reihe nach benannt werden

(1)Wechseln Sie zur Seriennummer 10 Datenbank

127.0.0.1:6379>Wählen Sie 10

OK

(2)Wechseln Sie zur Seriennummer 15 Datenbank

127.0.0.1:6379[10]>Wählen Sie 15

OK

(3)Wechseln Sie zur Seriennummer 0 Datenbank

127.0.0.1:6379[15]>Wählen Sie 0

(2) Verschieben von Daten zwischen mehreren Datenbanken

127.0.0.1:6379>Satz K1 100 Erstellen Sie k1 in Datenbank 0

OK

127.0.0.1:6379>Holen Sie sich k1

"100"

127.0.0.1:6379>Zug k1 1  //K1 in Datenbank 0 in Datenbank 1 verschieben

(Ganzzahl) 1

127.0.0.1:6379>Wählen Sie 1   //Wechseln Sie zur Zieldatenbank 1

OK

127.0.0.1:6379[1]>Holen Sie sich k1   //Verschobene Daten anzeigen

"100"

127.0.0.1:6379[1]> Wählen Sie 0

OK

127.0.0.1:6379> Holen Sie sich k1         //Der Wert von k1 kann in Datenbank 0 nicht angezeigt werden

(Null)

(3) Daten in der Datenbank löschen

Um die aktuellen Datenbankdaten zu löschen, verwenden Sie FLUSHDB

Befehlsimplementierung; alle Datenbankdaten löschen, verwenden FLUSHALL Befehlsimplementierung.

6. Redis-Persistenz

Redis Alle Daten werden im Speicher gespeichert und dann von Zeit zu Zeit asynchron auf der Festplatte gespeichert.(Das nennt manSemi-persistenter Modus”); Sie können jede Datenänderung auch in eine schreiben nur Datei anhängen (aof)In(Das nennt manVollständiger Persistenzmodus”)

Weil Redis Alle Daten werden im Speicher gespeichert. Wenn die Persistenz nicht konfiguriert ist,Redis Nach dem Neustart gehen alle Daten verloren.Daher ist eine Aktivierung erforderlichRedis Die Persistenzfunktion speichert Daten auf der Festplatte Redis Nach einem Neustart können Daten von der Festplatte wiederhergestellt werden.Redis Für die Persistenz stehen zwei Methoden zur Verfügung, eine davon RDBRedis-Datenbank Beharrlichkeit (das Prinzip ist ReidsZeitgesteuerter Dump von In-Memory-Datenbankdatensätzen (entsorgen)auf die Festplatte RDB Beharrlichkeit), das andere ist AOFnur anhängen DateiBeharrlichkeit (das Prinzip ist Reids Das Betriebsprotokoll wird als Anhang in die Datei geschrieben.

Der Unterschied zwischen RDB und AOF

ROB schreibt den Daten-Snapshot innerhalb des angegebenen Zeitintervalls. Es handelt sich um einen Unterprozess von fork. Er schreibt die Daten zunächst in einen temporären Ordner und speichert sie mit binärer Komprimierung.

AOF zeichnet jeden Schreib- und Löschvorgang des Servers in Protokollform auf. Abfragevorgänge werden nicht aufgezeichnet, sondern in Textform.

 

Vor- und Nachteile von RDB und AOF

RDB-Vorteile:

RDB ist eine kompakte, komprimierte Binärdatei, die eine Momentaufnahme der Redis-Daten zu einem bestimmten Zeitpunkt darstellt. Es eignet sich sehr gut für Backups, vollständige Kopien und andere Szenarien. Führen Sie beispielsweise alle 6 Stunden ein bgsave-Backup durch und kopieren Sie die RDB-Datei zur Notfallwiederherstellung auf den Remote-Computer oder das Dateisystem.

Die Datenwiederherstellung erfolgt schnell.

Maximieren Sie die Leistung

Hohe Starteffizienz

RDBMangel:

Daten, die vor dem Herunterfahren nicht gespeichert wurden, gehen verloren.

       RDB wird durch den untergeordneten Fork-Prozess abgeschlossen und verbraucht Ressourcen.

AOF-Vorteile:

Die Haltbarkeit der Daten ist hoch

Im Anhängemodus wird der Inhalt der Protokolldatei auch bei einer Ausfallzeit nicht zerstört.

Zum Schutz der Datensicherheit kann der Rewrite-Mechanismus gestartet werden.

AOF-Nachteile:

Die Geschwindigkeit der AOF-Datenwiederherstellung ist langsam

Die Effizienz des AOF-Betriebs ist gering

Kriterien für die Wahl zwischen den beiden:

Opfern Sie etwas Leistung im Austausch für eine höhere Cache-Konsistenz (AOF),

Bei häufigen Schreibvorgängen sollten Sie die Sicherung nicht im Austausch für eine höhere Leistung aktivieren und auf den manuellen Vorgang warten. speichern Wenn, erstellen Sie erneut ein Backup (RDB

Anmerkung:

Wenn Redies nach dem Neustart eine Persistenzdatei laden muss,PrioritätAOF-Dateien werden ausgewählt.

Wenn RDB zuerst und dann AOF aktiviert wird und RDB zuerst beibehalten wird, werden die Inhalte in der RDB-Datei von AOF überschrieben.

7. Redis-Persistenzkonfiguration

(1) RDB-Persistenzkonfiguration

[root@localhost ~]# vim /etc/redis/6379.conf

Offen 6379.conf Suchen Sie nach der Datei speichern, können Sie die Konfigurationsinformationen wie unten gezeigt sehen.

  • save 900 1: Wenn sich nach 900 Sekunden (15 Minuten) mindestens eine Taste ändert, wird der Speicherauszug gelöscht.
  • save 300 10: Wenn sich nach 300 Sekunden (5 Minuten) mindestens 10 Schlüssel geändert haben, wird der Speicher-Snapshot gelöscht.
  • save 60 10000: Wenn sich nach 60 Sekunden (1 Minute) mindestens 10000 Schlüssel geändert haben, wird der Speicher-Snapshot ausgegeben.
  • dbfilename dump.rdb: RDB-Dateiname ##254 Zeile
  • dir /var/lib/redis/6379: RDB-Dateipfad ##264 Zeile
  • rdbcompression ja: Ob Zeile ##242 komprimiert werden soll

(2) AOF-Persistenzkonfiguration

existieren Redis Die Konfigurationsdatei enthält drei Synchronisierungsmethoden:

  • nur anhängen jaAktivieren Sie die AOF-Persistenz (Standard ist nein), Zeile ##673
  • Anhängedateiname „appendonly.aof“ AOF-Dateiname ##677 Zeile
  • # appendfsync immer
  • appendfsync jede Sekunde
  • # appendfsync nein

Immer: Synchrone Persistenz. Jedes Mal, wenn sich Daten ändern, werden sie sofort auf die Festplatte geschrieben ##702 Zeile

everysec: Standardmäßig empfohlen, jede Sekunde asynchron aufzeichnen (Standardwert)

nein: Keine Synchronisierung, es bleibt dem Betriebssystem überlassen, zu entscheiden, wie synchronisiert wird

  • aof-load-truncated ja ##769 für

Ignorieren Sie die letzte möglicherweise problematische Anweisung

[root@localhost ~]#/etc/init.d/redis_6379 Neustart

8. Leistungsprobleme

(1) Speicherinformationen anzeigen

192.168.9.236:7001> Infospeicher

verwendeter_Speicher:1210776 Größe des verwendeten Speichers in Bytes
verwendeter_menschlicher_Speicher: 1,15 MAngezeigt mit Einheiten, in M
verwendeter_Speicher_RSS:7802880Wie viel Speicher belegt Redis aus Sicht des Betriebssystems?
verwendeter_Speicher_RSS_Human: 7,44 MAnzeige mit Einheiten
maximaler Speicher: 1073741824Maximale Speichergröße
maxmemory_human:1.00G Anzeige mit Einheiten

(2) Recyclingstrategie

MaxMemory-Richtlinie: Recyclingstrategie

 flüchtig-lru: es erlaubt Redis Wählen Sie aus dem gesamten Datensatz den zuletzt verwendeten aus Schlüssel Löschen

 flüchtig-ttlEliminieren Sie entsprechend der Ablaufzeit des Schlüssels 

 flüchtig-zufällig: Wählen Sie nach dem Zufallsprinzip Daten zur Eliminierung aus der Datensammlung mit festgelegter Ablaufzeit aus;

 allkeys-lru:verwenden LRU Algorithmen eliminieren Daten aus allen Datensätzen;

 alle Tasten - zufällig: Daten zur Eliminierung aus der Datensammlung zufällig auswählen;

 keine Räumung: Löschung von Daten deaktivieren (Standardwert)

Legen Sie die Ablaufzeit des Schlüssels fest

127.0.0.1:6379>ablaufen v1 10 v1 hat eine Ablaufzeit von 10 Sekunden

Anmerkung:

Wann Redis Aufgrund von Speichermangel muss eines zurückgefordert werden Schlüssel Stunde,Redis Die erste Überlegung besteht darin, nicht die ältesten Daten zu recyceln, sondern die am längsten verwendeten Daten. Schlüssel oder bald ablaufen Schlüssel Wählen Sie zufällig eines aus Schlüssel, aus dem Datensatz entfernt