Migrer de Memorystore pour Memcached vers Memorystore pour Valkey

Nous vous recommandons de migrer vos charges de travail Memorystore pour Memcached vers Memorystore pour Valkey. Memorystore pour Memcached est un datastore clé-valeur, tandis que Memorystore pour Valkey est un serveur de structures de données plus riche en fonctionnalités.

Memorystore pour Valkey vous offre des fonctionnalités semblables à celles de Memorystore pour Memcached. De plus, Memorystore pour Valkey présente les avantages suivants :

  • Il s'agit d'un service de stockage de données en mémoire entièrement géré et hautes performances pour Valkey, un projet Open Source compatible avec Redis.
  • Il s'agit d'un service Valkey entièrement géré pour Google Cloud, qui accepte les instances avec le mode cluster activé et celles avec le mode cluster désactivé.
  • Vos applications exécutées sur Google Cloud peuvent atteindre des performances exceptionnelles en exploitant le service Valkey hautement évolutif, disponible et sécurisé, sans avoir à gérer de déploiements Valkey complexes.

Fonctionnalités de Memorystore pour Valkey

La migration vers Memorystore pour Valkey vous permet d'accéder à des fonctionnalités qui ne sont pas disponibles dans Memorystore pour Memcached. Ces fonctionnalités vous offrent un meilleur développement d'applications, une meilleure fiabilité et de meilleures performances.

Le tableau suivant liste et décrit les fonctionnalités disponibles dans Memorystore pour Valkey, et explique les avantages de leur utilisation.

Fonctionnalité Description Avantages
Plusieurs bases de données Memorystore pour Memcached est un espace de clés unique et plat. Toutefois, par défaut, le mode Cluster Mode Disabled de Memorystore pour Valkey accepte jusqu'à 16 bases de données pour une instance. Vous pouvez configurer votre environnement de sorte à pouvoir disposer d'un maximum de 100 bases de données pour une instance. Le fait d'avoir plusieurs bases de données pour une instance évite un point de défaillance unique pour l'instance, vous permet de sauvegarder ou de restaurer une seule base de données sans affecter la disponibilité ni la cohérence des autres bases de données, et vous permet de mettre à l'échelle ou de migrer vos bases de données plus efficacement.
Structures de données enrichies En plus des chaînes, Memorystore pour Valkey est compatible avec les listes, les ensembles, les ensembles triés, les hachages et les bitmaps. Memorystore pour Valkey est également compatible avec les filtres Bloom, la recherche vectorielle et JSON. Vous pouvez utiliser Memorystore pour Valkey pour des cas d'utilisation complexes tels que les classements, les files d'attente de tâches et la mise en cache d'objets, sans sérialisation d'application. Vous pouvez également utiliser la recherche vectorielle pour effectuer des requêtes sémantiques avec des latences inférieures à la milliseconde.
Transactions Vous pouvez utiliser les commandes MULTI et EXEC pour exécuter un groupe de commandes de manière atomique, en tant qu'unité unique et indivisible. Bien que vous puissiez utiliser les fonctionnalités de comparaison et d'échange (CAS) de Memorystore pour Memcached pour le verrouillage optimiste au niveau d'une clé, Memorystore pour Valkey vous permet d'exécuter un groupe de commandes de manière atomique.
Messagerie Pub/Sub En utilisant Pub/Sub avec Memorystore pour Valkey, vos applications clientes peuvent s'abonner à des canaux et recevoir des messages en temps réel. Memorystore pour Valkey vous permet de transformer votre cache en un courtier de messages léger pour les mises à jour en temps réel et la communication entre les services.
Scripts Lua Vous pouvez utiliser Lua pour exécuter une logique d'application complexe de manière atomique sur votre serveur à l'aide de la commande EVAL. L'utilisation de scripts côté serveur réduit les allers-retours réseau et permet à Memorystore pour Valkey d'effectuer des opérations complexes sans interruption. Cela améliore les performances de votre application.
Haute disponibilité, réplication et compatibilité avec les shards L'architecture de Memorystore pour Valkey est compatible avec la haute disponibilité. Vos applications clientes peuvent accéder directement aux nœuds Memorystore for Valkey en se connectant à des points de terminaison (ou shards) individuels. La haute disponibilité et la réplication améliorent la fiabilité de votre système et minimisent les interruptions lors des mises à jour critiques. L'utilisation de fragments vous aide à répartir efficacement la charge de trafic élevée associée à vos applications clientes.
Persistance

Memorystore pour Valkey est compatible avec les types de persistance suivants :

  • Fichier AOF (Append-Only File) : utilisé pour la durabilité des données. Il stocke les données de manière durable en enregistrant chaque commande d'écriture dans un fichier journal appelé fichier AOF. En cas de défaillance ou de redémarrage du système, le serveur relit les commandes du fichier AOF de manière séquentielle pour restaurer vos données.
  • Base de données Redis (RDB) : utilisée pour la protection des données. Il protège vos données en enregistrant des instantanés de vos données dans un espace de stockage durable. En cas de défaillance de nœud, vous pouvez récupérer vos données.
En utilisant la persistance AOF et RDB, vous pouvez stocker vos données critiques de manière durable dans Memorystore pour Valkey. Vous pouvez récupérer vos données à tout moment. Memorystore pour Valkey gère le mécanisme de persistance sous-jacent, ce qui facilite l'utilisation de la persistance.

Migrez vos charges de travail

Pour migrer vos charges de travail Memorystore pour Memcached vers Memorystore pour Valkey, vous devez effectuer les actions suivantes :

  1. Modifiez vos bibliothèques clientes : remplacez les bibliothèques Memcached par des bibliothèques Valkey pour vos applications.
  2. Modifiez vos commandes : remplacez toutes les commandes de l'API Memcached pour vos applications clientes par les commandes correspondantes de l'API Valkey.
  3. Déployer et vérifier la migration : configurez la migration et vérifiez que vous pouvez l'utiliser pour migrer vos charges de travail vers Memorystore for Valkey.

Modifier vos bibliothèques clientes

Dans cette section, vous allez remplacer les bibliothèques clientes de vos applications par les bibliothèques Valkey.

Le tableau suivant liste des exemples de bibliothèques clientes Memcached pour Python, Java, Go et Node.js, ainsi que les bibliothèques correspondantes pour Valkey.

Langue Bibliothèque cliente Memcached Bibliothèque cliente Valkey
Python python-memcached, pymemcache valkey-py
Java spymemcached Valkey GLIDE, valkey-java
Go gomemcache Valkey GLIDE, valkey-go
Node.js memjs Valkey GLIDE, ioredis

Modifier vos commandes

Dans cette section, vous allez remplacer toutes les commandes de l'API Memcached pour vos applications clientes par les commandes correspondantes de l'API Valkey.

Pour modifier vos commandes, vous devez effectuer les actions suivantes :

  1. Modifier la configuration de votre connexion : remplacez la connexion de vos applications clientes du serveur Memcached au serveur Valkey.
  2. Modifiez les commandes : remplacez toutes les commandes de l'API Memcached par les commandes correspondantes de l'API Valkey.

Modifier la configuration de votre connexion

Dans cette section, vous allez modifier la connexion de vos applications clientes du serveur Memcached au serveur Valkey.

  1. Recherchez le code que vous utilisez pour connecter vos applications clientes au serveur Memcached. Cela peut ressembler au code suivant :

    import memcache;
    mc = memcache.Client(['MEMCACHED_IP_ADDRESS:11211'])
    

    Remplacez MEMCACHED_IP_ADDRESS par l'adresse IP de votre instance Memorystore pour Memcached.

  2. Modifiez ce code pour que vos applications clientes puissent se connecter au serveur Valkey. Cela peut ressembler au code suivant :

    import valkey;
    v = valkey.Valkey(host=VALKEY_IP_ADDRESS, port=6379, db=0)
    

    Remplacez VALKEY_IP_ADDRESS par l'adresse IP de l'instance Memorystore pour Valkey que vous créez lorsque vous déployez et vérifiez la migration.

Modifier les commandes

Dans cette section, vous allez remplacer toutes les commandes de l'API Memcached pour vos applications clientes par les commandes correspondantes de l'API Valkey.

DECR

La commande DECR vous permet de décrémenter la valeur stockée au niveau d'une clé d'un certain montant.

  1. Recherchez le code que vous utilisez dans Memcached pour la commande DECR. Cela peut ressembler au code suivant :

    mc.DECR('KEY_NAME', AMOUNT)
    

    Effectuez les remplacements suivants :

    • KEY_NAME : nom de la clé.
    • AMOUNT : valeur par laquelle vous souhaitez décrémenter le nombre stocké au niveau de la clé. Cette valeur doit être un nombre entier.
  2. Modifiez ce code pour pouvoir l'utiliser avec Valkey. Vos modifications peuvent ressembler au code suivant :

    v.DECR('KEY_NAME', AMOUNT)
    
SUPPRIMER

La commande DELETE vous permet de supprimer une clé. Par exemple, vous pouvez supprimer un utilisateur.

  1. Recherchez le code que vous utilisez dans Memcached pour la commande DELETE. Cela peut ressembler au code suivant :

    mc.DELETE('USERNAME')
    

    Remplacez USERNAME par le nom de l'utilisateur que vous souhaitez supprimer.

  2. Modifiez ce code pour pouvoir l'utiliser avec Valkey. Vos modifications peuvent ressembler au code suivant :

    v.DELETE('USERNAME')
    
GET

La commande GET vous permet de récupérer une valeur associée à une clé. Par exemple, vous pouvez obtenir des informations sur un utilisateur.

  1. Recherchez le code que vous utilisez dans Memcached pour la commande GET. Cela peut ressembler au code suivant :

    data = mc.GET('USERNAME')
    

    Remplacez USERNAME par le nom de l'utilisateur sur lequel vous souhaitez obtenir des informations.

  2. Modifiez ce code pour pouvoir l'utiliser avec Valkey. Vos modifications peuvent ressembler au code suivant :

    data = v.GET('USERNAME')
    
INCR

La commande INCR vous permet d'incrémenter la valeur stockée au niveau d'une clé d'un certain montant.

  1. Recherchez le code que vous utilisez dans Memcached pour la commande INCR. Cela peut ressembler au code suivant :

    mc.INCR('KEY_NAME', AMOUNT)
    

    Effectuez les remplacements suivants :

    • KEY_NAME : nom de la clé.
    • AMOUNT : valeur par laquelle vous souhaitez incrémenter le nombre stocké au niveau de la clé. Cette valeur doit être un nombre entier.
  2. Modifiez ce code pour pouvoir l'utiliser avec Valkey. Vos modifications peuvent ressembler au code suivant :

    v.INCR('KEY_NAME', AMOUNT)
    
MGET

La commande MGET vous permet de récupérer les valeurs de plusieurs clés en une seule commande. L'utilisation de MGET améliore les performances de votre environnement.

  1. Recherchez le code que vous utilisez dans Memcached pour la commande MGET. Cela peut ressembler au code suivant :

    data_map = mc.get_multi(['KEY_NAME_1', 'KEY_NAME_2'])
    

    Remplacez KEY_NAME_1 et KEY_NAME_2 par les noms des clés pour lesquelles vous souhaitez récupérer des informations.

  2. Modifiez ce code pour pouvoir l'utiliser avec Valkey. Vos modifications peuvent ressembler au code suivant :

    data_list = v.MGET(['KEY_NAME_1', 'KEY_NAME_2'])
    
SET

La commande SET vous permet de spécifier une valeur pour une clé. Par exemple, vous pouvez définir un délai d'expiration (en secondes) pour un utilisateur qui accède à un système.

  1. Recherchez le code que vous utilisez dans Memcached pour la commande SET. Cela peut ressembler au code suivant :

    mc.SET('USERNAME', 'data', time=EXPIRATION_TIME)
    

    Effectuez les remplacements suivants :

    • USERNAME : nom de l'utilisateur qui accède au système.
    • EXPIRATION_TIME : nombre de secondes avant que l'utilisateur ne puisse plus accéder au système
  2. Modifiez ce code pour pouvoir l'utiliser avec Valkey. Vos modifications peuvent ressembler au code suivant :

    v.SET('USERNAME', 'data', ex=EXPIRATION_TIME)
    

Déployer et vérifier la migration

Dans cette section, vous allez configurer la migration et vérifier que vous pouvez l'utiliser pour migrer vos charges de travail vers Memorystore for Valkey.

Pour déployer et vérifier la migration, procédez comme suit :

  1. Créez une instance Memorystore pour Valkey : assurez-vous que l'instance que vous créez a une taille similaire à celle de votre instance Memorystore pour Memcached. Utilisez également Cloud Monitoring pour surveiller l'utilisation de l'instance Memorystore pour Valkey.
  2. Écrire dans les deux instances : pour une migration sans temps d'arrêt, modifiez vos applications pour qu'elles écrivent dans les deux instances. Cela remplit le cache Valkey et vous permet de comparer les métriques de surveillance clés.
  3. Arrêtez le trafic vers l'instance Memorystore pour Memcached : modifiez la configuration de vos applications afin que les opérations de lecture pointent vers l'adresse IP et le numéro de port (6379) de l'instance Memorystore pour Valkey.
  4. Surveillez vos applications : surveillez les taux d'erreur et les latences de vos applications.
  5. Supprimez l'instance Memorystore pour Memcached : arrêtez d'écrire dans l'instance Memorystore pour Memcached, puis supprimez l'instance.

Questions fréquentes

Cette section contient des questions fréquentes sur la migration de vos charges de travail Memorystore for Memcached vers Memorystore for Valkey.

Pourquoi migrez-vous vers Memorystore pour Valkey ?

Valkey est un projet Open Source hautes performances issu du code source Redis. Memorystore pour Valkey fournit un service géré compatible avec le protocole Redis. Cela permet de s'assurer que toutes les bibliothèques clientes et commandes Redis existantes fonctionnent parfaitement. La migration vers Memorystore pour Valkey est fonctionnellement équivalente à la migration vers un serveur standard compatible avec Redis.

Dois-je reconfigurer les règles de pare-feu de mon réseau ?

Les instances Memorystore pour Memcached utilisent généralement le port 11211, tandis que les instances Memorystore pour Valkey utilisent le port 6379. Vous devez vous assurer que vos règles de pare-feu de cloud privé virtuel (VPC) autorisent le trafic sortant de vos applications vers les instances Memorystore pour Valkey sur le port approprié.

Comment Valkey gère-t-il la sérialisation des objets complexes ?

Comme Memcached ne connaît pas la structure des objets complexes, tels que les objets Python ou Java, il traite tous les objets comme des blobs opaques.

Par conséquent, avant que les données n'atteignent le réseau, la sérialisation se produit entièrement du côté des applications clientes. Le serveur ne voit que les tableaux d'octets. Par exemple, pour lire une seule propriété, telle que l'adresse e-mail d'un utilisateur, vous devez récupérer l'intégralité de l'objet sérialisé, le désérialiser dans vos applications, puis lire le champ associé à la propriété.

Valkey peut stocker des blobs et comprendre la structure des objets complexes. Vous pouvez également utiliser Valkey pour développer les champs d'un objet dans une table de hachage Valkey. Vous pouvez utiliser ce tableau pour récupérer directement des valeurs imbriquées.

L'exemple suivant utilise une table de hachage Valkey pour récupérer l'adresse e-mail d'un utilisateur :

# 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"

En quoi les protocoles de communication diffèrent-ils entre Memcached et Valkey ?

Memcached utilise un protocole ASCII et un protocole binaire facultatif. Valkey utilise le protocole de sérialisation Redis (RESP).

Bien qu'il s'agisse de protocoles différents, les bibliothèques d'applications clientes Valkey modernes gèrent automatiquement le protocole RESP. La différence entre les protocoles est ainsi transparente pour le code de l'application.

Après la migration vers Memorystore for Valkey, comment mapper le champ flags ?

Memorystore pour Memcached est compatible avec le champ flags. Ce champ contient un entier non signé de 32 bits que les bibliothèques d'applications clientes utilisent pour stocker des métadonnées sur les valeurs stockées.

Memorystore pour Valkey n'est pas compatible avec ce champ. Pour mapper le champ flags à Memorystore pour Valkey, procédez comme suit :

  1. Sérialisez les indicateurs dans le nom de clé d'un objet de chaîne.
  2. Sérialisez les indicateurs dans la valeur d'un objet de chaîne.
  3. Utilisez un objet de hachage avec un champ désigné pour les indicateurs.

Memorystore pour Valkey offre-t-il de meilleures performances ?

Dans la plupart des cas, les performances sont meilleures dans Memorystore pour Valkey. Cela est dû aux structures de données avancées de Valkey, aux connexions persistantes, à la compatibilité avec le pipeline et à l'efficacité améliorée des opérations à clés multiples. Toutefois, vous devez modifier correctement vos bibliothèques clientes et vos commandes.

Si vos instances Memorystore pour Memcached utilisent plusieurs nœuds, que faites-vous dans Memorystore pour Valkey ?

Lorsque vous déployez et validez votre migration, créez des instances avec le mode cluster activé dans Memorystore pour Valkey. Ces instances gèrent le partitionnement et la haute disponibilité en interne, et apparaissent comme des points de terminaison uniques pour vos applications. Cela simplifie la logique côté client de vos applications.

Si vos instances Memorystore pour Memcached utilisent plusieurs nœuds, quel type de nœud recommandons-nous pour vos instances Memorystore pour Valkey ?

Pour déterminer la taille des nœuds de chacune de vos instances Memorystore pour Memcached, vérifiez la valeur associée à la propriété Mémoire par nœud. Ensuite, pour déterminer le type de nœud de vos instances Memorystore pour Valkey correspondantes, utilisez le tableau suivant :

Taille des nœuds Memorystore pour Memcached Type de nœud Memorystore pour Valkey Capacité totale des nœuds Nombre de vCPU
< 1 Go shared-core-nano 1,4 Go 0.5 (Shared)
1 Go à 5 Go standard-small 6,5 Go 2
6 Go à 12 Go highmem-medium 13 Go 2
13 Go à 50 Go highmem-xlarge 58,0 Go 8

Le type de nœud shared-core-nano est destiné aux petites charges de travail. Ce type de nœud offre des performances variables et n'est pas associé à un SLA, ce qui le rend inadapté aux charges de travail de production.

Plus vous sélectionnez de processeurs virtuels (vCPU) pour votre instance Memorystore pour Valkey, meilleures seront les performances. Si votre instance exécute des charges de travail gourmandes en ressources, sélectionnez un type de nœud avec un nombre de vCPU plus élevé (par exemple, highmem-xlarge). Si votre instance effectue des tâches moins exigeantes, sélectionnez un type de nœud avec un nombre de vCPU plus faible (par exemple, highmem-medium).