Wie man Probleme in Redis behebt

Einführung

Redis ist ein Open-Source, in-memory Key-Value-Datenspeicher. Es verfügt über mehrere Befehle, die bei der Fehlerbehebung und Behebung von Problemen hilfreich sein können. Aufgrund der Natur von Redis als in-memory Key-Value Store konzentrieren sich viele dieser Befehle auf das Speichermanagement, aber es gibt auch andere, die wertvoll sind, um einen Überblick über den Zustand Ihres Redis-Servers zu erhalten. Dieses Tutorial gibt Details darüber, wie einige dieser Befehle verwendet werden können, um Probleme zu diagnostizieren und zu lösen, auf die Sie beim Einsatz von Redis stoßen könnten.

Wie Sie diesen Leitfaden verwenden

Dieser Leitfaden ist als Spickzettel mit eigenständigen Beispielen verfasst. Wir ermutigen Sie, zu dem Abschnitt zu springen, der für die Aufgabe relevant ist, die Sie abschließen möchten.

Die in diesem Leitfaden gezeigten Befehle wurden auf einem Ubuntu 22.04 Server getestet, auf dem Redis Version 6.0.16 läuft. Um eine ähnliche Umgebung einzurichten, können Sie Schritt 1 unseres Leitfadens zu Installation und Absicherung von Redis unter Ubuntu 22.04 folgen. Wir werden zeigen, wie sich diese Befehle verhalten, indem wir sie mit redis-cli ausführen, der Befehlszeilenschnittstelle von Redis. Wenn Sie eine andere Redis-Schnittstelle verwenden, wie zum Beispiel Redli, kann die genaue Ausgabe bestimmter Befehle unterschiedlich sein.

Alternativ könnten Sie eine verwaltete Redis-Datenbankinstanz bereitstellen, um diese Befehle zu testen. Je nachdem, welches Maß an Kontrolle Ihr Datenbankanbieter zulässt, könnten einige Befehle in dieser Anleitung möglicherweise nicht wie beschrieben funktionieren. Um eine DigitalOcean Managed Database bereitzustellen, folgen Sie unserer Produktdokumentation zu den Managed Databases. Anschließend müssen Sie entweder Redli installieren oder einen TLS-Tunnel einrichten, um eine Verbindung zur verwalteten Datenbank über TLS herzustellen.

memory usage zeigt Ihnen, wie viel Speicherplatz derzeit von einem einzelnen Schlüssel verwendet wird. Es nimmt den Namen eines Schlüssels als Argument und gibt die Anzahl der Bytes aus, die er verwendet. Zuerst setzen Sie eine Beispielvariable:

  1. set key_meaningOfLife "Food"

Als nächstes überprüfen Sie den Speicher mit memory usage:

  1. memory usage key_meaningOfLife
Output
(integer) 88

Für ein allgemeineres Verständnis, wie Ihr Redis-Server Speicher verwendet, können Sie den Befehl memory stats ausführen:

  1. memory stats

Dieser Befehl gibt ein Array von speicherbezogenen Metriken und ihren Werten aus. Die folgenden Metriken werden von memory stats gemeldet:

  • peak.allocated: Die Spitzenanzahl der von Redis verbrauchten Bytes
  • total.allocated: Die Gesamtanzahl der von Redis allokierten Bytes
  • startup.allocated: Die anfängliche Anzahl der bei der Redis-Startzeit verbrauchten Bytes
  • replication.backlog: Die Größe des Replikationsrückstands in Bytes
  • clients.slaves: Die Gesamtgröße aller Replikantenüberlastungen, d. h. Ausgabe- und Abfragepuffer und Verbindungskontexte
  • clients.normal: Die Gesamtgröße aller Client-Überlastungen
  • aof.buffer: Die Gesamtgröße der aktuellen und neu schreibenden Puffer der Nur-Anhängen-Datei
  • db.0: Die Überlastungen der Haupt- und Verfallsdictionaries für jede auf dem Server verwendete Datenbank, angegeben in Bytes
  • overhead.total: Die Summe aller Overheads, die zur Verwaltung des Schlüsselraums von Redis verwendet werden
  • keys.count: Die Gesamtanzahl der in allen Datenbanken auf dem Server gespeicherten Schlüssel
  • keys.bytes-per-key: Das Verhältnis zwischen dem Nettospeicherverbrauch des Servers und keys.count
  • dataset.bytes: Die Größe des Datensatzes in Bytes
  • dataset.percentage: Der Prozentsatz des Nettospeicherverbrauchs von Redis, der von dataset.bytes eingenommen wird
  • peak.percentage: Der Prozentsatz von peak.allocated aus total.allocated
  • fragmentation: Das Verhältnis der aktuell verwendeten Menge an Speicher geteilt durch den physischen Speicher, den Redis tatsächlich verwendet

memory malloc-stats liefert einen internen Statistikbericht von jemalloc, dem Speicherallokator, den Redis auf Linux-Systemen verwendet:

  1. memory malloc-stats

Wenn es so aussieht, als würden Sie auf speicherbezogene Probleme stoßen, aber das Parsen der Ausgabe der vorherigen Befehle keine Hilfe bietet, können Sie versuchen, memory doctor auszuführen:

  1. memory doctor

Diese Funktion gibt etwaige Speicherverbrauchsprobleme aus und schlägt mögliche Lösungen vor.

Allgemeine Informationen zu Ihrer Redis-Instanz erhalten

A debugging command that isn’t directly related to memory management is monitor. This command allows you to review a constant stream of every command processed by the Redis server:

  1. monitor
Output
OK 1566157213.896437 [0 127.0.0.1:47740] "auth" "foobared" 1566157215.870306 [0 127.0.0.1:47740] "set" "key_1" "878"

Ein weiterer nützlicher Befehl für die Fehlersuche ist info, der mehrere Blöcke von Informationen und Statistiken über den Server zurückgibt:

  1. info
Output
# Server redis_version:6.0.16 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:a3fdef44459b3ad6 redis_mode:standalone os:Linux 5.15.0-41-generic x86_64 . . .

Dieser Befehl gibt viele Informationen zurück. Wenn Sie nur einen Info-Block zurückgeben möchten, können Sie ihn als Argument für info angeben:

  1. info CPU
Output
# CPU used_cpu_sys:173.16 used_cpu_user:70.89 used_cpu_sys_children:0.01 used_cpu_user_children:0.04

Beachten Sie, dass die Informationen, die vom info-Befehl zurückgegeben werden, von der verwendeten Redis-Version abhängen können.

Verwendung des keys-Befehls

Der keys-Befehl ist nützlich, wenn Sie den Namen eines Schlüssels vergessen haben oder vielleicht einen erstellt haben, aber versehentlich falsch geschrieben haben. keys sucht nach Schlüsseln, die zu einem Muster passen:

  1. keys pattern

Die folgenden Glob-Stil-Variablen werden unterstützt:

  • ? ist ein Platzhalter für ein einzelnes Zeichen, sodass s?mmy zu sammy, sommy und sqmmy passt.
  • * ist ein Platzhalter, der für eine beliebige Anzahl von Zeichen steht, einschließlich kein Zeichen, sodass sa*y zu sammy, say, sammmmmmy und salmony passt.
  • Sie können zwei oder mehr Zeichen angeben, die das Muster enthalten können, indem Sie sie in Klammern einschließen. So passt s[ai]mmy zu sammy und simmy, aber nicht zu summy.
  • Um einen Platzhalter einzustellen, der ein oder mehrere Buchstaben ignoriert, schließen Sie sie in Klammern ein und setzen ihnen ein Zirkumflexzeichen (^) voran. So passt s[^oi]mmy zu sammy und sxmmy, aber nicht zu sommy oder simmy.
  • Um einen Platzhalter einzustellen, der einen Bereich von Buchstaben einschließt, trennen Sie den Anfang und das Ende des Bereichs mit einem Bindestrich und schließen ihn in Klammern ein. So passt s[a-o]mmy zu sammy, skmmy und sommy, aber nicht zu srmmy.

Warnung: Die Redis-Dokumentation warnt davor, dass keys in einer Produktionsumgebung fast nie verwendet werden sollte, da dies erhebliche negative Auswirkungen auf die Leistung haben kann.

Schlussfolgerung

Dieser Leitfaden enthält eine Reihe von Befehlen, die hilfreich sind, um Probleme zu beheben und Herausforderungen zu lösen, die bei der Arbeit mit Redis auftreten können. Wenn es andere verwandte Befehle, Argumente oder Verfahren gibt, über die Sie in diesem Leitfaden mehr erfahren möchten, fragen Sie bitte oder machen Sie Vorschläge in den Kommentaren.

Weitere Informationen zu Redis-Befehlen finden Sie in unserer Tutorialserie zum Thema Verwaltung einer Redis-Datenbank.

Source:
https://www.digitalocean.com/community/cheatsheets/how-to-troubleshoot-issues-in-redis