Migra de Memorystore para Memcached a Memorystore para Valkey

Te recomendamos que migres tus cargas de trabajo de Memorystore para Memcached a Memorystore para Valkey. Memorystore para Memcached es un almacén de datos de clave-valor, pero Memorystore para Valkey es un servidor de estructuras de datos con más funciones.

Memorystore para Valkey te proporciona una funcionalidad similar a la de Memorystore para Memcached. Además, Memorystore for Valkey tiene los siguientes beneficios:

  • Ofrece un almacén de datos en memoria completamente administrado y de alto rendimiento para Valkey, un proyecto de código abierto compatible con Redis.
  • Es un servicio de Valkey completamente administrado para Google Cloud, que admite instancias con el modo de clúster habilitado y con el modo de clúster inhabilitado.
  • Las aplicaciones que se ejecutan en Google Cloud pueden lograr un rendimiento extremo aprovechando el servicio de Valkey altamente escalable, disponible y seguro sin la carga de administrar implementaciones complejas de Valkey.

Funciones de Memorystore para Valkey

La migración a Memorystore para Valkey te brinda acceso a funciones que no están disponibles en Memorystore para Memcached. Estas funciones te brindan un mejor desarrollo, confiabilidad y rendimiento de las aplicaciones.

En la siguiente tabla, se enumeran y describen las funciones disponibles en Memorystore for Valkey, y se explican las ventajas de usar estas funciones.

Función Descripción Ventajas
Varias bases de datos Memorystore para Memcached es un espacio de claves único y plano. Sin embargo, de forma predeterminada, el modo Cluster Mode Disabled de Memorystore para Valkey admite hasta 16 bases de datos para una instancia. Puedes configurar tu entorno para tener hasta 100 bases de datos por instancia. Tener varias bases de datos para una instancia evita un punto único de falla para la instancia, te permite crear copias de seguridad o restablecer una sola base de datos sin afectar la disponibilidad o la coherencia de otras bases de datos, y te permite escalar o migrar tus bases de datos de manera más eficiente.
Estructuras de datos enriquecidas Además de las cadenas, Memorystore para Valkey admite listas, conjuntos, conjuntos ordenados, hashes y mapas de bits. Memorystore para Valkey también admite filtros de Bloom, búsqueda de vectores y JSON. Puedes usar Memorystore for Valkey para casos de uso complejos, como tablas de clasificación, colas de tareas y almacenamiento en caché de objetos, sin serialización de aplicaciones. También puedes usar la búsqueda de vectores para realizar consultas semánticas con latencias inferiores a un milisegundo.
Transacciones Puedes usar los comandos MULTI y EXEC para ejecutar un grupo de comandos como una sola unidad indivisible de forma atómica. Si bien puedes usar las capacidades de comparación y reemplazo (CAS) de Memorystore para Memcached para el bloqueo optimista a nivel de la clave, Memorystore para Valkey te permite ejecutar un grupo de comandos de forma atómica.
Mensajería de Pub/Sub Si usas Pub/Sub con Memorystore para Valkey, tus aplicaciones cliente pueden suscribirse a canales y recibir mensajes en tiempo real. Memorystore for Valkey te permite transformar tu caché en un agente de mensajes ligero para actualizaciones en tiempo real y comunicación entre servicios.
Secuencias de comandos Lua Puedes usar Lua para ejecutar lógicas de aplicación complejas de forma atómica en tu servidor con el comando EVAL. El uso de secuencias de comandos del servidor reduce los viajes de ida y vuelta de la red y garantiza que Memorystore para Valkey pueda realizar operaciones complejas sin interrupciones. Esto mejora el rendimiento de tu aplicación.
Compatibilidad con alta disponibilidad, replicación y fragmentos La arquitectura de Memorystore para Valkey admite y proporciona alta disponibilidad (HA). Tus aplicaciones cliente pueden acceder a los nodos de Memorystore for Valkey directamente conectándose a extremos individuales (o fragmentos). La HA y la replicación mejoran la confiabilidad del sistema y minimizan las interrupciones durante las actualizaciones críticas. El uso de fragmentos te ayuda a distribuir la carga alta de tráfico asociada con tus aplicaciones cliente de manera eficaz.
Persistencia

Memorystore para Valkey admite los siguientes tipos de persistencia:

  • Archivo de solo anexión (AOF): Se usa para la durabilidad de los datos. Almacena datos de forma duradera registrando cada comando de escritura en un archivo de registro llamado archivo AOF. Si se produce una falla o un reinicio del sistema, el servidor reproduce los comandos del archivo AOF de forma secuencial para restablecer tus datos.
  • Base de datos de Redis (RDB): Se usa para la protección de datos. Protege tus datos guardando instantáneas de ellos en un almacenamiento duradero. Si se producen fallas en los nodos, puedes recuperar tus datos.
Si usas la persistencia de AOF y RDB, puedes almacenar tus datos críticos de forma duradera en Memorystore para Valkey. Puedes recuperar tus datos en cualquier momento. Memorystore para Valkey controla el mecanismo de persistencia subyacente, por lo que no es necesario dedicar mucho tiempo a aprender a usar la persistencia.

Migra tus cargas de trabajo

Para migrar tus cargas de trabajo de Memorystore para Memcached a Memorystore para Valkey, debes completar las siguientes acciones:

  1. Modifica tus bibliotecas cliente: Cambia las bibliotecas cliente de tus aplicaciones de bibliotecas de Memcached a bibliotecas de Valkey.
  2. Modifica tus comandos: Reemplaza todos los comandos de la API de Memcached para tus aplicaciones cliente por los comandos correspondientes de la API de Valkey.
  3. Implementa y verifica la migración: Configura la migración y confirma que puedes usarla para migrar tus cargas de trabajo a Memorystore for Valkey.

Modifica tus bibliotecas cliente

En esta sección, cambiarás las bibliotecas cliente de tus aplicaciones de bibliotecas de Memcached a bibliotecas de Valkey.

En la siguiente tabla, se incluyen ejemplos de bibliotecas cliente de Memcached para Python, Java, Go y Node.js, y las bibliotecas correspondientes para Valkey.

Idioma Biblioteca cliente de Memcached Biblioteca cliente de 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

Cómo modificar tus comandos

En esta sección, reemplazarás todos los comandos de la API de Memcached para tus aplicaciones cliente por los comandos correspondientes de la API de Valkey.

Para modificar tus comandos, debes completar las siguientes acciones:

  1. Modifica la configuración de tu conexión: Cambia la conexión de tus aplicaciones cliente del servidor de Memcached al servidor de Valkey.
  2. Modifica los comandos: Reemplaza todos los comandos de la API de Memcached por los comandos correspondientes de la API de Valkey.

Modifica la configuración de la conexión

En esta sección, cambiarás la conexión de tus aplicaciones cliente del servidor de Memcached al servidor de Valkey.

  1. Busca el código que usas para conectar tus aplicaciones cliente al servidor de Memcached. Podría ser similar al siguiente código:

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

    Reemplaza MEMCACHED_IP_ADDRESS por la dirección IP de tu instancia de Memorystore para Memcached.

  2. Modifica este código para que tus aplicaciones cliente puedan conectarse al servidor de Valkey. Podría ser similar al siguiente código:

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

    Reemplaza VALKEY_IP_ADDRESS por la dirección IP de la instancia de Memorystore para Valkey que creaste cuando implementaste y verificaste la migración.

Modifica los comandos

En esta sección, reemplazarás todos los comandos de la API de Memcached para tus aplicaciones cliente por los comandos correspondientes de la API de Valkey.

DECR

El comando DECR te permite disminuir el valor almacenado en una clave en una cantidad determinada.

  1. Busca el código que usas en Memcached para el comando DECR. Esto podría ser similar al siguiente código:

    mc.DECR('KEY_NAME', AMOUNT)
    

    Realiza los siguientes reemplazos:

    • KEY_NAME: el nombre de la clave.
    • AMOUNT: Es el valor en el que deseas disminuir el número almacenado en la clave. Este valor debe ser un número entero.
  2. Modifica este código para que puedas usarlo con Valkey. Tus modificaciones podrían ser similares al siguiente código:

    v.DECR('KEY_NAME', AMOUNT)
    
BORRAR

El comando DELETE te permite quitar una clave. Por ejemplo, puedes borrar un usuario.

  1. Busca el código que usas en Memcached para el comando DELETE. Esto podría ser similar al siguiente código:

    mc.DELETE('USERNAME')
    

    Reemplaza USERNAME por el nombre del usuario que deseas borrar.

  2. Modifica este código para que puedas usarlo con Valkey. Tus modificaciones podrían ser similares al siguiente código:

    v.DELETE('USERNAME')
    
GET

El comando GET te permite recuperar un valor asociado a una clave. Por ejemplo, puedes obtener información sobre un usuario.

  1. Busca el código que usas en Memcached para el comando GET. Esto podría ser similar al siguiente código:

    data = mc.GET('USERNAME')
    

    Reemplaza USERNAME por el nombre del usuario sobre el que deseas obtener información.

  2. Modifica este código para que puedas usarlo con Valkey. Tus modificaciones podrían ser similares al siguiente código:

    data = v.GET('USERNAME')
    
INCR

El comando INCR te permite aumentar el valor que se almacena en una clave en una cantidad determinada.

  1. Busca el código que usas en Memcached para el comando INCR. Esto podría ser similar al siguiente código:

    mc.INCR('KEY_NAME', AMOUNT)
    

    Realiza los siguientes reemplazos:

    • KEY_NAME: el nombre de la clave.
    • AMOUNT: Es el valor en el que deseas aumentar el número almacenado en la clave. Este valor debe ser un número entero.
  2. Modifica este código para que puedas usarlo con Valkey. Tus modificaciones podrían ser similares al siguiente código:

    v.INCR('KEY_NAME', AMOUNT)
    
MGET

El comando MGET te permite recuperar valores para varias claves en un solo comando. El uso de MGET mejora el rendimiento de tu entorno.

  1. Busca el código que usas en Memcached para el comando MGET. Esto podría ser similar al siguiente código:

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

    Reemplaza KEY_NAME_1 y KEY_NAME_2 por los nombres de las claves sobre las que deseas recuperar información.

  2. Modifica este código para que puedas usarlo con Valkey. Tus modificaciones podrían ser similares al siguiente código:

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

El comando SET te permite especificar un valor para una clave. Por ejemplo, puedes establecer un tiempo de vencimiento para un usuario que accede a un sistema (en segundos).

  1. Busca el código que usas en Memcached para el comando SET. Esto podría ser similar al siguiente código:

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

    Realiza los siguientes reemplazos:

    • USERNAME: el nombre del usuario que accede al sistema
    • EXPIRATION_TIME: Es la cantidad de segundos que le quedan al usuario antes de que ya no pueda acceder al sistema.
  2. Modifica este código para que puedas usarlo con Valkey. Tus modificaciones podrían ser similares al siguiente código:

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

Implementa y verifica la migración

En esta sección, configurarás la migración y confirmarás que puedes usarla para migrar tus cargas de trabajo a Memorystore for Valkey.

Para implementar y verificar la migración, completa los siguientes pasos:

  1. Crea una instancia de Memorystore para Valkey: Asegúrate de que la instancia que crees tenga un tamaño similar al de tu instancia de Memorystore para Memcached. Además, usa Cloud Monitoring para supervisar el uso de la instancia de Memorystore para Valkey.
  2. Escribe en ambas instancias: Para una migración sin tiempo de inactividad, modifica tus aplicaciones para que escriban en ambas instancias. Esto propaga la caché de Valkey y te permite comparar las métricas clave de supervisión.
  3. Detén el tráfico hacia la instancia de Memorystore para Memcached: Cambia la configuración de tus aplicaciones para que las operaciones de lectura apunten a la dirección IP y al número de puerto (6379) de la instancia de Memorystore para Valkey.
  4. Supervisa tus aplicaciones: Supervisa las tasas de error y las latencias de tus aplicaciones.
  5. Borra la instancia de Memorystore para Memcached: Deja de escribir en la instancia de Memorystore para Memcached y, luego, bórrala.

Preguntas frecuentes

En esta sección, se incluyen preguntas frecuentes sobre la migración de tus cargas de trabajo de Memorystore para Memcached a Memorystore para Valkey.

¿Por qué migras a Memorystore for Valkey?

Valkey es una bifurcación de alto rendimiento y de código abierto del código base de Redis. Memorystore for Valkey proporciona un servicio administrado que es compatible con el protocolo de Redis. Esto garantiza que todos los comandos y las bibliotecas cliente de Redis existentes funcionen sin problemas. La migración a Memorystore for Valkey es funcionalmente equivalente a la migración a un servidor estándar compatible con Redis.

¿Debes volver a configurar las reglas de firewall de tu red?

Las instancias de Memorystore para Memcached suelen usar el puerto 11211, mientras que las instancias de Memorystore para Valkey usan el puerto 6379. Debes asegurarte de que las reglas de firewall de tu nube privada virtual (VPC) permitan el tráfico de salida de tus aplicaciones a las instancias de Memorystore para Valkey en el puerto correcto.

¿Cómo controla Valkey la serialización de objetos complejos?

Como Memcached no conoce la estructura de los objetos complejos, como los objetos de Python o Java, trata a todos los objetos como blobs opacos.

Como resultado, antes de que los datos lleguen a la red, la serialización se realiza por completo del lado de las aplicaciones cliente. El servidor solo ve arrays de bytes. Por ejemplo, para leer una sola propiedad, como la dirección de correo electrónico de un usuario, debes recuperar todo el objeto serializado, deserializarlo en tus aplicaciones y, luego, leer el campo asociado a la propiedad.

Valkey puede almacenar BLOB y comprender la estructura de los objetos complejos. También puedes usar Valkey para expandir los campos de un objeto en una tabla hash de Valkey. Puedes usar esta tabla para recuperar valores anidados de forma directa.

En el siguiente ejemplo, se usa una tabla hash de Valkey para recuperar la dirección de correo electrónico de un usuario:

# 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 qué se diferencian los protocolos de comunicación entre Memcached y Valkey?

Memcached usa un protocolo ASCII y un protocolo binario opcional. Valkey usa el Protocolo de serialización de Redis (RESP).

Aunque se trata de protocolos diferentes, las bibliotecas cliente modernas de la aplicación de Valkey controlan el protocolo RESP de forma automática. Esto hace que la diferencia entre los protocolos sea transparente para el código de la aplicación.

Después de migrar a Memorystore for Valkey, ¿cómo se asigna el campo flags?

Memorystore para Memcached admite el campo flags. Este campo contiene un número entero sin signo de 32 bits que las bibliotecas de aplicaciones cliente usan para almacenar metadatos sobre los valores almacenados.

Memorystore para Valkey no admite este campo. Para asignar el campo flags a Memorystore para Valkey, completa los siguientes pasos:

  1. Serializa las marcas en el nombre de la clave de un objeto de cadena.
  2. Serializa las marcas en el valor de un objeto de cadena.
  3. Usa un objeto hash con un campo designado para las marcas.

¿Memorystore para Valkey ofrece un mejor rendimiento?

En la mayoría de los casos, el rendimiento es mejor en Memorystore para Valkey. Esto se debe a las estructuras de datos avanzadas, las conexiones persistentes, la compatibilidad con canalización y la eficiencia mejorada de las operaciones con varias claves de Valkey. Sin embargo, debes modificar tus bibliotecas cliente y comandos correctamente.

Si tus instancias de Memorystore para Memcached usan varios nodos, ¿qué haces en Memorystore para Valkey?

Cuando implementes y verifiques tu migración, crea instancias con el modo de clúster habilitado en Memorystore for Valkey. Estas instancias controlan la fragmentación y la alta disponibilidad de forma interna, y aparecen como extremos únicos para tus aplicaciones. Esto simplifica la lógica del cliente de tus aplicaciones.

Si tus instancias de Memorystore para Memcached usan varios nodos, ¿qué tipo de nodo recomendamos para tus instancias de Memorystore para Valkey?

Para determinar el tamaño del nodo de cada una de tus instancias de Memorystore para Memcached, verifica el valor asociado a la propiedad Memoria por nodo. Luego, para determinar el tipo de nodo de tus instancias correspondientes de Memorystore para Valkey, usa la siguiente tabla:

Tamaño del nodo de Memorystore para Memcached Tipo de nodo de Memorystore para Valkey Capacidad total de nodos Recuento de CPU virtuales
Menos de 1 GB shared-core-nano 1.4 GB 0.5 (compartido)
1 GB a 5 GB standard-small 6.5 GB 2
6 a 12 GB highmem-medium 13.0 GB 2
De 13 a 50 GB highmem-xlarge 58.0 GB 8

El tipo de nodo shared-core-nano es para cargas de trabajo pequeñas. Este tipo de nodo proporciona un rendimiento variable y no tiene un ANS, por lo que no es adecuado para las cargas de trabajo de producción.

Cuantas más CPU virtuales (vCPU) selecciones para tu instancia de Memorystore para Valkey, mejor será el rendimiento. Si tu instancia ejecuta cargas de trabajo que consumen muchos recursos, selecciona un tipo de nodo con una mayor cantidad de CPU virtuales (por ejemplo, highmem-xlarge). Si tu instancia realiza tareas menos exigentes, selecciona un tipo de nodo con una menor cantidad de CPU virtuales (por ejemplo, highmem-medium).