Memorystore for Redis fornisce un servizio completamente gestito basato sul datastore Redis in memoria per creare cache di applicazioni che consentono l'accesso ai dati in meno di un millisecondo.
Se la tua app Python 2 utilizza Memcache per ridurre la latenza solo per le richieste ndb
o Cloud NDB, puoi utilizzare il supporto integrato di Cloud NDB per Redis, anziché Memcache o Memorystore per Redis.
Informazioni sulle autorizzazioni di Memorystore
Ogni interazione con un servizio Google Cloud deve essere autorizzata. Ad esempio, per interagire con un database Redis ospitato da Memorystore, la tua app deve fornire le credenziali di un account autorizzato ad accedere a Memorystore.
Per impostazione predefinita, l'app fornisce le credenziali dell'account di servizio predefinito di App Engine, che è autorizzato ad accedere ai database nello stesso progetto dell'app.
Se una delle seguenti condizioni è vera, devi utilizzare una tecnica di autenticazione alternativa che fornisca esplicitamente le credenziali:
La tua app e il database Memorystore sono in progetti Google Cloud diversi.
Hai modificato i ruoli assegnati all'account di servizio App Engine predefinito.
Per informazioni sulle tecniche di autenticazione alternative, consulta la pagina Configurare l'autenticazione per le applicazioni di produzione da server a server.
Panoramica del processo di migrazione
Per eseguire la migrazione dell'app Python per utilizzare Memorystore anziché Memcache:
Configura Memorystore for Redis, per cui devi creare un'istanza Redis su Memorystore e creare un accesso VPC serverless che la tua app utilizza per comunicare con l'istanza Redis. La creazione di queste due entità indipendenti non è rigorosa e può essere impostata in qualsiasi ordine. Innanzitutto, le istruzioni in questa guida mostrano come configurare l'accesso VPC serverless.
Installa una libreria client per Redis e utilizza i comandi Redis per memorizzare i dati nella cache.
Memorystore per Redis è compatibile con qualsiasi libreria client per Redis. Questa guida descrive l'utilizzo della libreria client redis-py 3.0 per inviare comandi Redis dalla tua app.
Configurazione di Memorystore for Redis
Per configurare Memorystore for Redis:
Connetti App Engine a una rete VPC. La tua app può comunicare con Memorystore solo tramite un connettore VPC.
Assicurati di aggiungere le informazioni sulla connessione VPC al file
app.yaml
come descritto in Configurare l'app utilizzando il connettore.Prendi nota dell'indirizzo IP e del numero di porta dell'istanza Redis che crei. Utilizzerai queste informazioni quando crei un client Redis nel codice.
Crea un'istanza Redis in Memorystore.
Quando ti viene chiesto di selezionare una regione per l'istanza Redis, seleziona la stessa regione in cui si trova la tua app App Engine.
Installazione delle dipendenze
Per rendere disponibile la libreria client redis-py per la tua applicazione quando viene eseguita in App Engine:Aggiungi la seguente riga al file
requirements.txt
della tua app:redis
Se esegui ancora la tua app nel runtime di Python 2:
Utilizza pip (versione 6 o successiva) con il flag
-t <directory>
per installare le librerie in una cartella locale denominatalib
. Ad esempio:pip install -t lib <library_name> -r requirements.txt
Assicurati che il file
appengine_config.py
dell'app specifichi la directorylib
.
App Engine caricherà tutte le librerie nella directory specificata nel file
appengine_config.py
. Per maggiori dettagli, consulta la pagina Utilizzo delle librerie Python 2.
Il runtime di App Engine Python 3 caricherà automaticamente tutte le librerie nel file requirements.txt
della tua app quando esegui il deployment dell'app.
Per lo sviluppo locale, consigliamo di installare le dipendenze in un ambiente virtuale come virtualenv per Python 2 o venv per Python 3.
Creazione di un client Redis
Per interagire con un database Redis, il tuo codice deve creare un client Redis per gestire la connessione al database Redis. Le seguenti sezioni descrivono la creazione di un client Redis mediante la libreria client redis-py.
Specifica delle variabili di ambiente
La libreria client redis-py utilizza due variabili di ambiente per assemblare l'URL del database Redis:
- Una variabile per identificare l'indirizzo IP del database Redis creato in Memorystore.
- Una variabile per identificare il numero di porta del database Redis creato in Memorystore.
Ti consigliamo di definire queste variabili nel file app.yaml
dell'app invece di definirle direttamente nel codice. In questo modo è più semplice eseguire l'app in ambienti diversi, ad esempio in un ambiente locale e in App Engine.
app.yaml
:
env_variables:
REDISHOST: '10.112.12.112'
REDISPORT: '6379'
Importando redis-py e creando il client
Dopo aver definito le variabili di ambienteREDISHOST
e REDISPORT
, utilizza le seguenti righe per importare la libreria redis-py e creare un client:
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)
Se hai utilizzato una versione precedente di redis-py per altre app, potresti aver usato la classe StrictClient
invece di Client
. Tuttavia, redis-py ora consiglia Client
invece di StrictClient
.
Utilizzo dei comandi Redis per archiviare e recuperare dati nella cache
Sebbene il database Memorystore Redis supporti la maggior parte dei comandi Redis, è sufficiente utilizzare pochi comandi per archiviare e recuperare i dati dalla cache. La seguente tabella suggerisce i comandi Redis che puoi utilizzare per memorizzare i dati nella cache. Per vedere come chiamare questi comandi dalla tua app, consulta la documentazione della libreria client.
Tieni presente che anche se Memcache fornisce alternative asincrone per molti dei suoi comandi, la libreria client redis-py non fornisce sempre metodi asincroni equivalenti. Se richiedi l'asincrona di tutte le interazioni con la cache, sono disponibili altre librerie client Redis per Python.Attività | Comando Redis |
---|---|
Crea una voce nella cache dei dati e imposta una scadenza per la voce |
SETNX MSETNX |
Recupera i dati dalla cache | SCARICA MGET |
Sostituisci i valori della cache esistenti | IMPOSTA MIMPOSTA |
Aumenta o riduci i valori numerici della cache | INCR INCRBY DECR DECRBY |
Eliminare le voci dalla cache | CANC SCOLLEGA |
Supporta le interazioni simultanee con la cache (confronta e imposta) | Scopri i dettagli delle transazioni Redis. Tieni presente che la libreria client redis-py richiede che tutte le transazioni vengano eseguite in una pipeline. |
Test degli aggiornamenti
Quando testi la tua app localmente, valuta la possibilità di eseguire un'istanza local di Redis per evitare interazioni con i dati di produzione (Memorystore non fornisce un emulatore). Per installare ed eseguire Redis localmente, segui le istruzioni riportate nella documentazione di Redis. Tieni presente che al momento non è possibile eseguire Redis localmente su Windows.
Per ulteriori informazioni sul test delle app Python 2, consulta Utilizzo del server di sviluppo locale.Deployment dell'app
Quando l'app è in esecuzione nel server di sviluppo locale senza errori:
Se l'app viene eseguita senza errori, utilizza la suddivisione del traffico per aumentare lentamente il traffico verso l'app aggiornata. Monitora attentamente l'app per verificare se ci sono problemi del database prima di indirizzare più traffico all'app aggiornata.