Cloud Memorystore para Redis proporciona un servicio completamente administrado para el almacenamiento de datos en memoria de Redis que permite crear almacenamientos en caché de aplicaciones para brindar acceso a datos en menos de milisegundos.
Si tu app de Python 2 usa Memcache a fin de reducir solo la latencia para las solicitudes ndb
o Cloud NDB, puedes usar la compatibilidad integrada de Cloud NDB para Redis, en lugar de Memcache o Memorystore for Redis.
Información sobre los permisos de Memorystore
Cada interacción con un servicio de Google Cloud debe estar autorizada. Por ejemplo, a fin de interactuar con una base de datos de Redis que se aloja en Memorystore, la app debe proporcionar las credenciales de una cuenta autorizada para acceder a Memorystore.
De forma predeterminada, la app proporciona las credenciales de la cuenta de servicio predeterminada de App Engine, que está autorizada para acceder a las bases de datos en el mismo proyecto que la app.
Si se cumple alguna de las siguientes condiciones, deberás usar una técnica de autenticación alternativa que proporcione credenciales de forma explícita:
La app y la base de datos de Memorystore están en diferentes proyectos de Google Cloud.
Cambiaste las funciones asignadas a la cuenta de servicio predeterminada de App Engine.
Si deseas obtener información sobre técnicas de autenticación alternativas, consulta Configura la autenticación para aplicaciones de producción de servidor a servidor.
Descripción general del proceso de migración
Para migrar tu app de Python y usar Memorystore en lugar de Memcache, haz lo siguiente:
Configura Memorystore para Redis, que requiere que crees una instancia de Redis en Memorystore y un Acceso a VPC sin servidores que la app usará a fin de comunicarse con la instancia de Redis. El orden de creación de estas dos entidades independientes no es estricto y se puede configurar en cualquier orden. En las instrucciones de esta guía, primero se muestra cómo configurar el Acceso a VPC sin servidores.
Instala una biblioteca cliente para Redis y usa los comandos de Redis a fin de almacenar datos en caché.
Memorystore para Redis es compatible con cualquier biblioteca cliente de Redis. En esta guía, se describe el uso de la biblioteca cliente de redis-py 3.0 para enviar comandos de Redis desde la app.
Configura Memorystore para Redis
Si deseas configurar Memorystore para Redis, debes hacer lo siguiente:
Conecta App Engine a una red de VPC. La app solo puede comunicarse con Memorystore a través de un conector de VPC.
Asegúrate de agregar la información de conexión de VPC al archivo
app.yaml
como se describe en Configura la app para usar un conector.Anota la dirección IP y el número de puerto de la instancia de Redis que crees. Usarás esta información cuando crees un cliente de Redis en el código.
Crea una instancia de Redis en Memorystore.
Cuando se te solicite seleccionar una región para la instancia de Redis, selecciona la misma región en la que se encuentra la app de App Engine.
Instala dependencias
Si deseas que la biblioteca cliente de redis-py esté disponible para tu app cuando se ejecuta en App Engine, haz lo siguiente:Agrega la siguiente línea al archivo
requirements.txt
de la app:redis
Si aún ejecutas la app en el entorno de ejecución de Python 2, sigue estos pasos:
Usa pip (versión 6 o posterior) con la marca
-t <directory>
para instalar las bibliotecas en una carpeta local llamadalib
. Por ejemplo:pip install -t lib <library_name> -r requirements.txt
Asegúrate de que el archivo
appengine_config.py
de la app especifique el directoriolib
.
App Engine subirá todas las bibliotecas del directorio que especificaste en el archivo
appengine_config.py
. Para obtener más información, consulta Usa bibliotecas de Python 2.
En el entorno de ejecución de Python 3 de App Engine, se subirán de forma automática todas las bibliotecas del archivo requirements.txt
de la app cuando implementes la app.
Si desarrollas de manera local, te recomendamos que instales dependencias en un entorno virtual, como virtualenv para Python 2 o venv para Python 3.
Crea un cliente de Redis
Para interactuar con una base de datos de Redis, el código debe crear un cliente de Redis a fin de administrar la conexión a la base de datos de Redis. En las siguientes secciones, se describe cómo crear un cliente de Redis con la biblioteca cliente de redis-py.
Especifica las variables de entorno
La biblioteca cliente de redis-py usa dos variables de entorno para ensamblar la URL de la base de datos de Redis:
- Una variable para identificar la dirección IP de la base de datos de Redis que creaste en Memorystore
- Una variable para identificar el número de puerto de la base de datos de Redis que creaste en Memorystore
Te recomendamos definir estas variables en el archivo app.yaml
de la app en lugar de definirlas directamente en el código. Esto facilita la ejecución de la app en diferentes entornos, como un entorno local y App Engine.
app.yaml
:
env_variables:
REDISHOST: '10.112.12.112'
REDISPORT: '6379'
Importa redis-py y crea el cliente
Después de definir las variables de entornoREDISHOST
y REDISPORT
, usa las siguientes líneas para importar la biblioteca de redis-py y crear un cliente:
import redis
redis_host = os.environ.get('REDISHOST', 'localhost')
redis_port = int(os.environ.get('REDISPORT', 6379))
redis_client = redis.Redis(host=redis_host, port=redis_port)
Si usaste una versión anterior de redis-py para otras apps, tal vez usaste la clase StrictClient
en lugar de Client
. Sin embargo, redis-py ahora recomienda Client
en lugar de StrictClient
.
Usa comandos de Redis para almacenar y recuperar datos en la caché
Si bien la base de datos de Redis para Memorystore admite la mayoría de los comandos de Redis, solo debes usar algunos comandos a fin de almacenar y recuperar datos de la caché. En la siguiente tabla, se sugieren los comandos de Redis que puedes usar para almacenar datos en caché. Para saber cómo llamar a estos comandos desde la app, consulta la documentación de la biblioteca cliente.
Ten en cuenta que, si bien Memcache proporciona alternativas asíncronas para muchos de sus comandos, la biblioteca cliente de redis-py no siempre proporciona métodos asíncronos equivalentes. Si necesitas que todas las interacciones con la caché sean asíncronas, hay otras bibliotecas cliente de Redis para Python disponibles.Tarea | Comando de Redis |
---|---|
Crear una entrada en la caché de datos y establecer una fecha de vencimiento para la entrada |
SETNX MSETNX |
Recuperar los datos de la caché | GET MGET |
Reemplazar los valores existentes de la caché | SET MSET |
Aumentar o disminuir los valores numéricos de la caché | INCR INCRBY DECR DECRBY |
Borrar las entradas de la caché | DEL UNLINK |
Admitir interacciones simultáneas con la caché (comparar y establecer) | Consulta los detalles sobre las transacciones de Redis. Ten en cuenta que la biblioteca cliente de redis-py requiere que todas las transacciones se realicen en una canalización. |
Prueba las actualizaciones
Cuando pruebes la app de forma local, considera ejecutar una instancia local de Redis para evitar la interacción con los datos de producción (Memorystore no proporciona un emulador). Para instalar y ejecutar Redis de forma local, sigue las instrucciones en la documentación de Redis. Ten en cuenta que en este momento no es posible ejecutar Redis de manera local en Windows.
Para obtener más información sobre cómo probar las apps de Python 2, consulta Usa el servidor de desarrollo local.Implementa tu app
Una vez que la app se ejecute en el servidor de desarrollo local sin errores, haz lo siguiente:
Si la app se ejecuta sin errores, usa la división de tráfico para aumentar el tráfico de la app actualizada. Supervísala de cerca a fin de detectar cualquier problema en la base de datos antes de enrutar más tráfico a la app actualizada.