Wir empfehlen, Ihre Memorystore for Memcached-Arbeitslasten zu Memorystore for Valkey zu migrieren. Memorystore for Memcached ist ein Schlüssel/Wert-Datenspeicher, Memorystore for Valkey ist jedoch ein Server mit mehr Funktionen für Datenstrukturen.
Memorystore for Valkey bietet ähnliche Funktionen wie Memorystore for Memcached. Außerdem bietet Memorystore for Valkey die folgenden Vorteile:
- Er bietet einen vollständig verwalteten, leistungsstarken In-Memory-Datenspeicher für Valkey, ein Redis-kompatibles Open-Source-Projekt.
- Es handelt sich um einen vollständig verwalteten Valkey-Dienst für Google Cloud, der sowohl Instanzen mit aktiviertem als auch mit deaktiviertem Clustermodus unterstützt.
- Ihre Anwendungen, die auf Google Cloud ausgeführt werden, können mithilfe des hoch skalierbaren, hochverfügbaren und sicheren Valkey-Dienstes eine extrem hohe Leistung erzielen, ohne dass komplexe Valkey-Bereitstellungen verwaltet werden müssen.
Funktionen von Memorystore for Valkey
Wenn Sie zu Memorystore for Valkey migrieren, erhalten Sie Zugriff auf Funktionen, die in Memorystore for Memcached nicht verfügbar sind. Diese Funktionen bieten Ihnen eine bessere App-Entwicklung, Zuverlässigkeit und Leistung.
In der folgenden Tabelle werden die in Memorystore for Valkey verfügbaren Funktionen aufgeführt und beschrieben. Außerdem werden die Vorteile der Verwendung dieser Funktionen erläutert.
| Funktion | Beschreibung | Vorteile |
|---|---|---|
| Mehrere Datenbanken | Memorystore for Memcached ist ein einzelner, flacher Schlüsselbereich. Standardmäßig unterstützt der Modus Cluster Mode Disabled von Memorystore for Valkey jedoch bis zu 16 Datenbanken für eine Instanz. Sie können Ihre Umgebung so konfigurieren, dass Sie bis zu 100 Datenbanken für eine Instanz haben können. | Mehrere Datenbanken für eine Instanz verhindern einen Single Point of Failure für die Instanz. Außerdem können Sie eine einzelne Datenbank sichern oder wiederherstellen, ohne die Verfügbarkeit oder Konsistenz anderer Datenbanken zu beeinträchtigen. Darüber hinaus lassen sich Ihre Datenbanken effizienter skalieren oder migrieren. |
| Umfangreiche Datenstrukturen | Neben Strings unterstützt Memorystore for Valkey auch Listen, Mengen, sortierte Mengen, Hashes und Bitmaps. Memorystore for Valkey unterstützt auch Bloom-Filter, Vektorsuche und JSON. | Sie können Memorystore for Valkey für komplexe Anwendungsfälle wie Bestenlisten, Aufgabenwarteschlangen und Objekt-Caching ohne Anwendungsserialisierung verwenden. Sie können die Vektorsuche auch verwenden, um semantische Abfragen mit Latenzen im Submillisekundenbereich durchzuführen. |
| Transaktionen | Mit den Befehlen MULTI und EXEC können Sie eine Gruppe von Befehlen als einzelne, unteilbare Einheit atomar ausführen. |
Sie können zwar die CAS-Funktionen (Compare-and-Swap) von Memorystore for Memcached für optimistische Sperren auf Schlüsselebene verwenden, mit Memorystore for Valkey können Sie jedoch eine Gruppe von Befehlen atomar ausführen. |
| Pub/Sub-Messaging | Wenn Sie Pub/Sub mit Memorystore for Valkey verwenden, können Ihre Clientanwendungen Kanäle abonnieren und Echtzeitnachrichten empfangen. | Mit Memorystore for Valkey können Sie Ihren Cache in einen einfachen Message-Broker für Echtzeit-Updates und die Kommunikation zwischen Diensten umwandeln. |
| Lua-Skripts | Mit Lua können Sie komplexe Anwendungslogik mit dem Befehl EVAL atomar auf Ihrem Server ausführen.
|
Durch die Verwendung serverseitiger Skripts werden die Netzwerk-Roundtrips reduziert und es wird dafür gesorgt, dass Memorystore for Valkey komplexe Vorgänge ohne Unterbrechungen ausführen kann. Dadurch wird die Leistung Ihrer Anwendung gesteigert. |
| Unterstützung von Hochverfügbarkeit, Replikation und Sharding | Die Architektur von Memorystore for Valkey unterstützt und bietet Hochverfügbarkeit (HA). Ihre Clientanwendungen können direkt auf Memorystore for Valkey-Knoten zugreifen, indem sie eine Verbindung zu einzelnen Endpunkten (oder Shards) herstellen. | HA und Replikation erhöhen die Zuverlässigkeit Ihres Systems und minimieren Unterbrechungen bei wichtigen Updates. Mit Shards können Sie die hohe Trafficlast, die mit Ihren Clientanwendungen verbunden ist, effektiv verteilen. |
| Persistenz | Memorystore for Valkey unterstützt die folgenden Arten von Persistenz:
|
Mit AOF- und RDB-Persistenz können Sie Ihre wichtigen Daten dauerhaft in Memorystore for Valkey speichern. Sie können Ihre Daten jederzeit wiederherstellen. Memorystore for Valkey übernimmt den zugrunde liegenden Persistenzmechanismus, sodass die Verwendung von Persistenz nur wenig Einarbeitungszeit erfordert. |
Arbeitslasten migrieren
Wenn Sie Ihre Memorystore for Memcached-Arbeitslasten zu Memorystore for Valkey migrieren möchten, müssen Sie die folgenden Schritte ausführen:
- Clientbibliotheken ändern: Ändern Sie die Clientbibliotheken für Ihre Anwendungen von Memcached-Bibliotheken zu Valkey-Bibliotheken.
- Befehle ändern: Ersetzen Sie alle Befehle für die Memcached API für Ihre Clientanwendungen durch die entsprechenden Befehle für die Valkey API.
- Migration bereitstellen und prüfen: Richten Sie die Migration ein und bestätigen Sie, dass Sie damit Ihre Arbeitslasten zu Memorystore for Valkey migrieren können.
Clientbibliotheken ändern
In diesem Abschnitt ändern Sie die Clientbibliotheken für Ihre Anwendungen von Memcached-Bibliotheken zu Valkey-Bibliotheken.
In der folgenden Tabelle finden Sie Beispiele für Memcached-Clientbibliotheken für Python, Java, Go und Node.js sowie die entsprechenden Bibliotheken für Valkey.
| Sprache | Memcached-Clientbibliothek | Valkey-Clientbibliothek |
|---|---|---|
| Python | python-memcached, pymemcache | valkey-py |
| Java | spymemcached | Valkey GLIDE, valkey-java |
| Go | gomemcache | Valkey GLIDE, valkey-go |
| Node.js | memjs | Valkey GLIDE, ioredis |
Befehle ändern
In diesem Abschnitt ersetzen Sie alle Befehle für die Memcached API für Ihre Clientanwendungen durch die entsprechenden Befehle für die Valkey API.
So ändern Sie Ihre Befehle:
- Verbindungseinrichtung ändern: Ändern Sie die Verbindung Ihrer Clientanwendungen vom Memcached-Server zum Valkey-Server.
- Befehle ändern: Ersetzen Sie alle Memcached API-Befehle durch die entsprechenden Befehle für die Valkey API.
Verbindungseinrichtung ändern
In diesem Abschnitt ändern Sie die Verbindung Ihrer Clientanwendungen vom Memcached-Server zum Valkey-Server.
Suchen Sie den Code, mit dem Sie Ihre Clientanwendungen mit dem Memcached-Server verbinden. Das könnte so aussehen:
import memcache; mc = memcache.Client(['MEMCACHED_IP_ADDRESS:11211'])
Ersetzen Sie MEMCACHED_IP_ADDRESS durch die IP-Adresse Ihrer Memorystore for Memcached-Instanz.
Ändern Sie diesen Code so, dass Ihre Clientanwendungen eine Verbindung zum Valkey-Server herstellen können. Das könnte so aussehen:
import valkey; v = valkey.Valkey(host=VALKEY_IP_ADDRESS, port=6379, db=0)
Ersetzen Sie VALKEY_IP_ADDRESS durch die IP-Adresse der Memorystore for Valkey-Instanz, die Sie beim Bereitstellen und Überprüfen der Migration erstellen.
Befehle ändern
In diesem Abschnitt ersetzen Sie alle Memcached API-Befehle für Ihre Clientanwendungen durch die entsprechenden Befehle für die Valkey API.
DECR
Mit dem Befehl DECR können Sie den Wert, der unter einem Schlüssel gespeichert ist, um einen bestimmten Betrag verringern.
Suchen Sie nach dem Code, den Sie in Memcached für den Befehl
DECRverwenden. Das kann so aussehen:mc.DECR('KEY_NAME', AMOUNT)Ersetzen Sie die folgenden Werte:
- KEY_NAME: der Name des Schlüssels
- AMOUNT: Der Wert, um den Sie die unter dem Schlüssel gespeicherte Zahl dekrementieren möchten. Dieser Wert muss eine Ganzzahl sein.
Ändern Sie diesen Code, damit Sie ihn mit Valkey verwenden können. Ihre Änderungen könnten dem folgenden Code ähneln:
v.DECR('KEY_NAME', AMOUNT)
LÖSCHEN
Mit dem Befehl DELETE können Sie einen Schlüssel entfernen. Sie können beispielsweise einen Nutzer löschen.
Suchen Sie nach dem Code, den Sie in Memcached für den Befehl
DELETEverwenden. Das könnte so aussehen:mc.DELETE('USERNAME')Ersetzen Sie USERNAME durch den Namen des Nutzers, den Sie löschen möchten.
Ändern Sie diesen Code, damit Sie ihn mit Valkey verwenden können. Ihre Änderungen könnten dem folgenden Code ähneln:
v.DELETE('USERNAME')
GET
Mit dem Befehl GET können Sie einen Wert abrufen, der einem Schlüssel zugeordnet ist. Sie können beispielsweise Informationen zu einem Nutzer abrufen.
Suchen Sie nach dem Code, den Sie in Memcached für den Befehl
GETverwenden. Das kann so aussehen:data = mc.GET('USERNAME')Ersetzen Sie USERNAME durch den Namen des Nutzers, zu dem Sie Informationen erhalten möchten.
Ändern Sie diesen Code, damit Sie ihn mit Valkey verwenden können. Ihre Änderungen könnten dem folgenden Code ähneln:
data = v.GET('USERNAME')
INCR
Mit dem Befehl INCR können Sie den Wert, der unter einem Schlüssel gespeichert ist, um einen bestimmten Betrag erhöhen.
Suchen Sie nach dem Code, den Sie in Memcached für den Befehl
INCRverwenden. Das kann so aussehen:mc.INCR('KEY_NAME', AMOUNT)Ersetzen Sie die folgenden Werte:
- KEY_NAME: der Name des Schlüssels
- AMOUNT: Der Wert, um den Sie die unter dem Schlüssel gespeicherte Zahl erhöhen möchten. Dieser Wert muss eine Ganzzahl sein.
Ändern Sie diesen Code, damit Sie ihn mit Valkey verwenden können. Ihre Änderungen könnten dem folgenden Code ähneln:
v.INCR('KEY_NAME', AMOUNT)
MGET
Mit dem Befehl MGET können Sie Werte für mehrere Schlüssel in einem einzigen Befehl abrufen. Die Verwendung von MGET verbessert die Leistung Ihrer Umgebung.
Suchen Sie nach dem Code, den Sie in Memcached für den Befehl
MGETverwenden. Das kann so aussehen:data_map = mc.get_multi(['KEY_NAME_1', 'KEY_NAME_2'])
Ersetzen Sie KEY_NAME_1 und KEY_NAME_2 durch die Namen der Schlüssel, zu denen Sie Informationen abrufen möchten.
Ändern Sie diesen Code, damit Sie ihn mit Valkey verwenden können. Ihre Änderungen könnten dem folgenden Code ähneln:
data_list = v.MGET(['KEY_NAME_1', 'KEY_NAME_2'])
SET
Mit dem Befehl SET können Sie einen Wert für einen Schlüssel angeben. Sie können beispielsweise eine Ablaufzeit für einen Nutzer festlegen, der auf ein System zugreift (in Sekunden).
Suchen Sie nach dem Code, den Sie in Memcached für den Befehl
SETverwenden. Das kann so aussehen:mc.SET('USERNAME', 'data', time=EXPIRATION_TIME)Ersetzen Sie die folgenden Werte:
- USERNAME: der Name des Nutzers, der auf das System zugreift
- EXPIRATION_TIME: Die Anzahl der Sekunden, die der Nutzer noch Zeit hat, bis er nicht mehr auf das System zugreifen kann.
Ändern Sie diesen Code, damit Sie ihn mit Valkey verwenden können. Ihre Änderungen könnten dem folgenden Code ähneln:
v.SET('USERNAME', 'data', ex=EXPIRATION_TIME)
Migration bereitstellen und überprüfen
In diesem Abschnitt richten Sie die Migration ein und bestätigen, dass Sie sie verwenden können, um Ihre Arbeitslasten zu Memorystore for Valkey zu migrieren.
Führen Sie die folgenden Schritte aus, um die Migration bereitzustellen und zu überprüfen:
- Memorystore for Valkey-Instanz erstellen: Die erstellte Instanz muss eine ähnliche Größe wie Ihre Memorystore for Memcached-Instanz haben. Verwenden Sie außerdem Cloud Monitoring, um die Nutzung der Memorystore for Valkey-Instanz zu überwachen.
- In beide Instanzen schreiben: Für eine Migration ohne Ausfallzeiten müssen Sie Ihre Anwendungen so ändern, dass sie in beide Instanzen schreiben. Dadurch wird der Valkey-Cache gefüllt und Sie können wichtige Monitoring-Messwerte vergleichen.
- Traffic zur Memorystore for Memcached-Instanz beenden: Ändern Sie die Konfiguration Ihrer Anwendungen so, dass Lesevorgänge auf die IP-Adresse und Portnummer (6379) der Memorystore for Valkey-Instanz verweisen.
- Anwendungen überwachen: Überwachen Sie die Fehlerraten und Latenzen Ihrer Anwendungen.
- Memorystore for Memcached-Instanz löschen: Beenden Sie das Schreiben in die Memorystore for Memcached-Instanz und löschen Sie die Instanz.
FAQ
Dieser Abschnitt enthält häufig gestellte Fragen zur Migration Ihrer Memorystore for Memcached-Arbeitslasten zu Memorystore for Valkey.
Warum migrieren Sie zu Memorystore for Valkey?
Valkey ist ein leistungsstarkes Open-Source-Projekt, das auf dem Redis-Code basiert. Memorystore for Valkey bietet einen verwalteten Dienst, der mit dem Redis-Protokoll kompatibel ist. So wird dafür gesorgt, dass alle vorhandenen Redis-Clientbibliotheken und -Befehle nahtlos funktionieren. Die Migration zu Memorystore for Valkey ist funktional gleichwertig mit der Migration zu einem standardmäßigen, Redis-kompatiblen Server.
Müssen Sie die Firewallregeln Ihres Netzwerks neu konfigurieren?
Memorystore for Memcached-Instanzen verwenden in der Regel Port 11211, während Memorystore for Valkey-Instanzen Port 6379 verwenden. Sie müssen dafür sorgen, dass Ihre VPC-Firewallregeln (Virtual Private Cloud) ausgehenden Traffic von Ihren Anwendungen zu den Memorystore for Valkey-Instanzen am richtigen Port zulassen.
Wie verarbeitet Valkey die Serialisierung komplexer Objekte?
Da Memcached die Struktur komplexer Objekte wie Python- oder Java-Objekte nicht kennt, werden alle Objekte als undurchsichtige Blobs behandelt.
Bevor Daten das Netzwerk erreichen, erfolgt die Serialisierung daher vollständig auf der Seite der Clientanwendungen. Der Server sieht nur Byte-Arrays. Wenn Sie beispielsweise eine einzelne Eigenschaft wie die E-Mail-Adresse eines Nutzers lesen möchten, müssen Sie das gesamte serialisierte Objekt abrufen, es in Ihren Anwendungen deserialisieren und dann das Feld lesen, das der Eigenschaft zugeordnet ist.
Valkey kann Blobs speichern und die Struktur komplexer Objekte verstehen. Sie können Valkey auch verwenden, um die Felder eines Objekts in eine Valkey-Hashtabelle zu erweitern. Mit dieser Tabelle können Sie tief verschachtelte Werte direkt abrufen.
Im folgenden Beispiel wird eine Valkey-Hashtabelle verwendet, um die E-Mail-Adresse eines Nutzers abzurufen:
# valkey-py
client.hset("user:101", mapping={
"name": "username",
"email": "username@example.com",
"login_count": 10
})
client.hget("user:101", "email") # -> b"username@example.com"
Wie unterscheiden sich die Kommunikationsprotokolle zwischen Memcached und Valkey?
Memcached verwendet ein ASCII-Protokoll und ein optionales Binärprotokoll. Valkey verwendet das Redis Serialization Protocol (RESP).
Obwohl es sich um unterschiedliche Protokolle handelt, wird das RESP-Protokoll von modernen Valkey-Clientanwendungsbibliotheken automatisch verarbeitet. Dadurch wird der Unterschied zwischen den Protokollen für den Anwendungscode transparent.
Wie wird das Feld flags nach der Migration zu Memorystore for Valkey zugeordnet?
Memorystore for Memcached unterstützt das Feld flags. Dieses Feld enthält eine 32-Bit-Ganzzahl ohne Vorzeichen, die von Clientanwendungsbibliotheken zum Speichern von Metadaten zu gespeicherten Werten verwendet wird.
Dieses Feld wird von Memorystore for Valkey nicht unterstützt. So ordnen Sie das Feld flags Memorystore for Valkey zu:
- Serialisieren Sie die Flags in den Schlüsselnamen eines String-Objekts.
- Serialisieren Sie die Flags in den Wert eines String-Objekts.
- Verwenden Sie ein Hash-Objekt mit einem bestimmten Feld für Flags.
Bietet Memorystore for Valkey eine bessere Leistung?
In den meisten Szenarien ist die Leistung in Memorystore for Valkey besser. Das liegt an den fortschrittlichen Datenstrukturen, persistenten Verbindungen, der Unterstützung von Pipelining und der verbesserten Effizienz für Vorgänge mit mehreren Schlüsseln von Valkey. Sie müssen jedoch Ihre Clientbibliotheken und Befehle entsprechend ändern.
Wenn Ihre Memorystore for Memcached-Instanzen mehrere Knoten verwenden, was tun Sie dann in Memorystore for Valkey?
Wenn Sie Ihre Migration bereitstellen und überprüfen, erstellen Sie Instanzen mit aktiviertem Clustermodus in Memorystore for Valkey. Diese Instanzen verarbeiten Sharding und Hochverfügbarkeit intern und werden Ihren Anwendungen als einzelne Endpunkte angezeigt. Dadurch wird die clientseitige Logik Ihrer Anwendungen vereinfacht.
Wenn Ihre Memorystore for Memcached-Instanzen mehrere Knoten verwenden, welchen Knotentyp empfehlen wir dann für Ihre Memorystore for Valkey-Instanzen?
Um die Knotengröße für jede Ihrer Memorystore for Memcached-Instanzen zu ermitteln, sehen Sie sich den Wert an, der mit der Eigenschaft Arbeitsspeicher pro Knoten verknüpft ist. Verwenden Sie dann die folgende Tabelle, um den Knotentyp für die entsprechenden Memorystore for Valkey-Instanzen zu bestimmen:
| Knotengröße für Memorystore for Memcached | Memorystore for Valkey-Knotentyp | Gesamtknotenkapazität | vCPU Anzahl |
|---|---|---|---|
| < 1 GB | shared-core-nano | 1,4 GB | 0.5 (Freigegeben) |
| 1 GB bis 5 GB | standard-small | 6,5 GB | 2 |
| 6 GB bis 12 GB | highmem-medium | 13,0 GB | 2 |
| 13 GB bis 50 GB | highmem-xlarge | 58,0 GB | 8 |
Der Knotentyp shared-core-nano ist für kleine Arbeitslasten vorgesehen. Dieser Knotentyp bietet eine variable Leistung und hat kein SLA, sodass er für Produktionsarbeitslasten nicht geeignet ist.
Je mehr virtuelle CPUs (vCPUs) Sie für Ihre Memorystore for Valkey-Instanz auswählen, desto besser ist die Leistung. Wenn auf Ihrer Instanz ressourcenintensive Arbeitslasten ausgeführt werden, wählen Sie einen Knotentyp mit einer höheren vCPU aus (z. B. highmem-xlarge). Wenn auf Ihrer Instanz weniger anspruchsvolle Aufgaben ausgeführt werden, wählen Sie einen Knotentyp mit einer niedrigeren vCPU aus (z. B. highmem-medium).