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:
- Während eines niedrigen Schreibsatzes exportieren.
- Wenn Sie während einer Periode mit hoher Schreibrate exportieren, senken Sie die
maxmemory-Konfiguration vorübergehend auf 50 % der Instanzkapazität, um genügend Overhead für eine erfolgreiche Operation bereitzustellen.
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:
- Verringern Sie die maxmemory-Konfiguration auf 80 % der Instanzkapazität für die Dauer des Vorgangs. Dies ist ein ausreichender Overhead für einen erfolgreichen Vorgang.
- Beobachten Sie den Messwert für das Verhältnis der Systemspeicherauslastung, und achten Sie darauf, dass dieser Messwert weniger als 80% beträgt, bevor Sie einen dieser Vorgänge ausführen.
- Führen Sie diese Vorgänge in Zeiten mit niedrigem Instanztraffic aus, z. B. über Nacht oder am Wochenende.
- Richten Sie eine Wiederholungslogik mit exponentiellem Backoff ein, bevor Sie diese Vorgänge ausführen.
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:
- Versionsupgrade
- Hoch-/Herunterskalieren
- Wird importiert...
- Manueller Failover
- Systemwartung
- Rotation von Zertifizierungsstellen für Redis-Instanzen mit aktivierter Verschlüsselung während der Übertragung
- Notfall-Failover
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:
- Legen Sie ein Wartungsfenster fest, in dem Wartungsupdates stattfinden können.
- Planen Sie Wartungsfenster für Zeiten mit geringem Instanztraffic und ausreichendem Arbeitsspeicher-Overhead. Weitere Informationen finden Sie unter Auswirkungen von Wartungsupdates.
- Aktivieren Sie Benachrichtigungen zu Wartungsfenstern, um über bevorstehende Wartungen informiert zu werden.
- Es ist eine Wiederholungslogik mit exponentiellem Backoff erforderlich.
- Bei Instanzen der Standardstufe können Sie ein Wartungsereignis mit manuellem Failover simulieren, um zu sehen, wie sich der durch die Wartung verursachte Failover auf Ihre Anwendung auswirkt.
- Bei Instanzen der Basic-Stufe können Sie die Auswirkungen eines Wartungsupdates simulieren, indem Sie die Instanz vorübergehend auf eine größere Größe skalieren. Nachdem Sie die Auswirkungen beobachtet haben, können Sie wieder auf die ursprüngliche Größe skalieren.
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:
- Cloud Monitoring-Benachrichtigung für die Arbeitsspeichernutzung festlegen
- Cloud Monitoring-Benachrichtigung für Systemspeicherauslastung einstellen
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 intervalundTCP keepalive probesso fest, dass Clients nicht reagierende Verbindungen proaktiv erkennen und trennen, auch wenn Verbindungen inaktiv sind. Wenn Sie beispielsweise den ParameterTCP keepalive timeauf 30 Sekunden,TCP keepalive intervalauf 10 Sekunden undTCP keepalive probesauf 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.