Best practices for Memorystore for Redis

Auf dieser Seite finden Sie eine Anleitung zur optimalen Verwendung von Memorystore for Redis. Diese Seite weist auch auf mögliche Probleme hin.

Eine Liste mit Szenarien zur Fehlerbehebung finden Sie unter Fehlerbehebung.

RDB-Export

Beachten Sie beim Exportieren einer RDB-Sicherung die folgende Anleitung:

Ressourcenintensive Vorgänge

Bei Redis-Instanzen der Standardstufe verwenden die folgenden Vorgänge zusätzlichen Speicher für die Dauer des Vorgangs:

Durch ein Upgrade der Version, des Autoscaling und des manuellen Failovers wird aufgrund der Replikation zusätzlicher Speicher (für Instanzen der Standardstufe) verbraucht. Diese Vorgänge folgen dem Replikationsprozess, wie unter Standardverhalten der Instanz-Upgrade beschrieben.

Für Import- und Exportvorgänge ist zusätzlicher Speicher erforderlich, da der fehlerhafte Prozess der Redis-Prozesse und das Kopieren/Schreiben unter diesen Vorgängen beansprucht werden.

Zur Verringerung der Nachteile ressourcenintensiver Vorgänge sollten Sie Folgendes tun:

Vorgänge und Szenarien, für die eine Verbindungswiederholung erforderlich ist

Folgende Vorgänge und Szenarien unterbrechen die Netzwerkverbindung zwischen Ihrem Netzwerk und der Redis-Instanz:

Durch diese Vorgänge wird Ihre Instanz geändert, sodass eine vorübergehende Verbindungsunterbrechung notwendig ist. Sie müssen eine Wiederholungslogik mit exponentiellem Backoff eingerichtet haben, bevor diese Vorgänge ausgeführt werden, damit Ihre Anwendung automatisch wieder eine Verbindung herstellt und weiterhin normal funktioniert.

Routinewartung

Memorystore for Redis-Instanzen werden regelmäßig gewartet. Weitere Informationen finden Sie in der Wartungsrichtlinie für Memorystore for Redis maintenance policy.

Setzen Sie folgende Best Practices ein, um auf routinemäßige Wartungen vorbereitet zu sein:

Speicherverwaltung

Die Arbeitsspeicherverwaltung kann aufgrund der bekannten Speicherfragmentierung die mit Open-Source-Redis auftritt, eine Herausforderung sein. Wir empfehlen Ihnen, die maxmemory-Konfiguration für Ihre Instanz zu senken, um sich im Falle eines hohen Arbeitsspeicherbedarfs durch Overhead zu kümmern.

Die beste Methode zur Überwachung des Arbeitsspeicherbedarfs auf Ihrer Memorystore Instanz ist die Verwendung des Verhältnisses zur Systemspeicherauslastung. Eine ausführlichere Anleitung zum Verwalten von Arbeitsspeicher für Memorystore for Redis, siehe Best Practices für Arbeitsspeicherverwaltung.

Inaktive Verbindungen verwalten

Im Laufe der Zeit kann die Anzahl der Verbindungen zu Ihrer Memorystore-Instanz zunehmen, wenn Verbindungen nicht ordnungsgemäß beendet werden. Dies kann sich negativ auf die Leistung auswirken, insbesondere wenn Sie die Verschlüsselung während der Übertragung verwenden. Hierbei gelten maximale Verbindungslimits entsprechend Ihrer Kapazitätsstufe. Um dies zu vermeiden, empfehlen wir die Verwendung des timeout Redis-Konfigurationsparameters mit dem Sie die Anzahl der Sekunden festlegen können, bevor inaktive Clientverbindungen automatisch beendet werden.

Access Transparency-Ressourcennamen

Vertrauliche Daten sollten nicht in Memorystore for Redis-Ressourcennamen gespeichert werden. Mit Ressourcennamen sind Memorystore for Redis-Instanznamen und Instanzmetadaten wie Tags gemeint. Es wird nicht garantiert, dass Daten, die in Ressourcennamen gespeichert sind, durch Google Cloud Access Transparency geschützt sind. Sie können mit den Access Transparency-Complianceanforderungen Ihrer Organisation in Konflikt stehen.

Serverless VPC Access Connector erforderlich für einige serverlose Umgebungen

Einige serverlose Umgebungen benötigen einen Connector für serverlosen VPC-Zugriff, um eine Verbindung zu Memorystore for Redis herzustellen. Richten Sie den Connector für serverlosen VPC-Zugriff für Ihr Projekt ein, wenn Sie eine Verbindung über eine dieser Umgebungen herstellen möchten.

Netzwerk

Wir empfehlen, den Zugriff auf private Dienste Verbindungsmodus zu verwenden. Memorystore for Redis verwendet zwei Verbindungsmodi: Zugriff auf private Dienste und Direct Peering. Mit dem Verbindungsmodus für den Zugriff auf private Dienste wird die Verwaltung von IP-Bereichen vereinfacht und Sie können bei Bedarf eine freigegebene VPC verwenden.

Der Verbindungsmodus kann nach dem Erstellen einer Instanz nicht mehr geändert werden.

Weitere Informationen finden Sie unter Netzwerk.

Monitoring und Warnungen

Wir empfehlen die Verwendung von Monitoring und Benachrichtigungen , da diese wichtige Signale zur Arbeitsspeichernutzung Ihrer Redis-Instanz liefern. Sie geben außerdem Aufschluss darüber, wie effizient Ihre Redis-Instanz auf eingehende Cache-Anfragen reagiert.

Sie sollten folgende Standardwarnungen einrichten:

Best Practices für die CPU-Auslastung

Die unsachgemäße Verwendung teurer Redis-Befehle führt zu hoher Latenz, mangelnder Reaktionsfähigkeit oder Verbindungsproblemen. Instanzen der Standardstufe bieten Hochverfügbarkeit bei der Notfallwiederherstellung und basieren auf der asynchronen Replikation zwischen primären Knoten und Replikatknoten. Wenn einer der Knoten eine teure Befehlsverarbeitung hat, die den Redis-Hauptthread blockiert, kann sich dies auf die Replikation auswirken. Wenn das Problem weiterhin besteht und ein Standortausfall auftritt, sind die neuesten Daten, die am Standort des Ausfalls geschrieben wurden, möglicherweise nicht am anderen Standort verfügbar.

Wir empfehlen, mit Cloud Monitoring Benachrichtigungen für den Messwert „CPU-Sekunden des Hauptthreads“ (redis.googleapis.com/stats/cpu_utilization_main_thread) festzulegen, um sicherzustellen, dass die CPU-Auslastung 0,8 Sekunden für den primären Knoten oder 0,5 Sekunden für jeden Replikatknoten nicht überschreitet, wenn der Replikatknoten als Lesereplikat festgelegt ist.

Wenn Ihre Redis-Instanz die empfohlenen Werte überschreitet, empfehlen wir, die Instanz auf eine höhere Kapazitätsstufe zu skalieren oder die Anweisungen zur Fehlerbehebung zu befolgen, um CPU-intensive Vorgänge zu vermeiden.

Wenn bei Ihrer Instanz eine hohe CPU-Auslastung auftritt oder die Ressourcen der Instanz erschöpft sind (z. B. durch zu viele Verbindungen), kann sich die Instanz falsch verhalten und externe Messwerte fehlen möglicherweise.

Ressourcenintensive Befehle

Wir empfehlen dringend, die Verwendung ressourcenintensiver Redis-Befehle zu vermeiden. Die Verwendung dieser Befehle kann zu den folgenden Leistungsproblemen führen:

  • Hohe Latenz und Client-Timeouts
  • Arbeitsspeicherbedarf durch Befehle, die die Arbeitsspeichernutzung erhöhen
  • Datenverlust bei der Knotenreplikation und -synchronisierung, weil der Redis-Hauptthread blockiert ist
  • Systemdiagnosen, Beobachtbarkeit und Replikation werden nicht ausgeführt

In der folgenden Tabelle sind Beispiele für ressourcenintensive Redis-Befehle aufgeführt und ressourceneffiziente Alternativen genannt.

Kategorie Ressourcenintensiver Befehl Ressourceneffiziente Alternative
Für den gesamten Schlüsselbereich ausführen KEYS SCAN
Für einen Schlüsselbereich mit variabler Länge ausführen LRANGE Beschränken Sie die Größe des Bereichs, den Sie für eine Abfrage verwenden.
ZRANGE Beschränken Sie die Größe des Bereichs, den Sie für eine Abfrage verwenden.
HGETALL HSCAN
SMEMBERS SSCAN
Ausführung eines Skripts blockieren EVAL Achten Sie darauf, dass Ihr Skript nicht unbegrenzt ausgeführt wird.
EVALSHA Achten Sie darauf, dass Ihr Skript nicht unbegrenzt ausgeführt wird.
Dateien und Links entfernen DEL UNLINK
Veröffentlichen und abonnieren PUBLISH SPUBLISH
SUBSCRIBE SSUBSCRIBE

Best Practices für Redis-Clients

In diesem Abschnitt finden Sie eine Anleitung zur optimalen Verwendung Ihres Redis-Clients.

Nicht reagierende Verbindungen erkennen und verarbeiten

Wir empfehlen dringend, Ihre Clientanwendung so zu konfigurieren, dass nicht reagierende Verbindungen zu Memorystore for Redis erkannt werden. Wenn eine nicht reagierende Verbindung erkannt wird, muss der Client sie zurücksetzen. Um eine robuste Anwendung zu erstellen, empfehlen wir die folgenden Clientkonfigurationen:

  • TCP-Keep-Alive-Parameter konfigurieren: Legen Sie die Parameter TCP keepalive time, TCP keepalive interval und TCP keepalive probes so fest, dass Clients nicht reagierende Verbindungen proaktiv erkennen und trennen, auch wenn Verbindungen inaktiv sind. Wenn Sie beispielsweise den Parameter TCP keepalive time auf 30 Sekunden, TCP keepalive interval auf 10 Sekunden und TCP keepalive probes auf 3 festlegen, setzen Clients nicht reagierende inaktive Verbindungen innerhalb einer Minute zurück.
  • TCP-Benutzertimeouts konfigurieren: Legen Sie dieses Timeout in Ihren Clients fest, um Verbindungen zurückzusetzen, die ausstehende Anfragen haben und nicht mehr reagieren. Wenn Sie das Timeout beispielsweise auf 15 Sekunden festlegen, setzen Clients nicht reagierende Verbindungen mit ausstehenden Anfragen nach 15 Sekunden zurück.