Le applicazioni web scalabili ad alte prestazioni spesso utilizzano una cache di dati in memoria distribuita davanti o al posto di un'archiviazione permanente robusta per alcune attività. Ti consigliamo di utilizzare Memorystore for Redis come servizio di memorizzazione nella cache. Tieni presente che Memorystore for Redis non fornisce un livello senza costi. Per i dettagli, consulta Prezzi di Memorystore.
Prima di iniziare, assicurati che la tua app rimanga entro le quote di Memorystore for Redis.
Quando utilizzare una memoria cache
I dati delle sessioni, le preferenze utente e altri dati restituiti dalle query per le pagine web sono buoni candidati per la memorizzazione nella cache. In generale, se una query eseguita di frequente restituisce un insieme di risultati che non devono essere visualizzati immediatamente nella tua app, puoi memorizzare i risultati nella cache. Le richieste successive possono controllare la cache ed eseguire query sul database solo se i risultati non sono presenti o sono scaduti.
Se memorizzi un valore solo in Memorystore senza eseguirne il backup nell'archiviazione permanente, assicurati che la tua applicazione si comporti in modo accettabile se il valore scade e viene rimosso dalla cache. Ad esempio, se l'improvvisa assenza dei dati di sessione di un utente causasse un malfunzionamento della sessione, questi dati dovrebbero probabilmente essere archiviati nel database oltre che in Memorystore.
Informazioni sulle autorizzazioni di Memorystore
Ogni interazione con un Google Cloud servizio 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.
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 si trovano in progetti diversi Google Cloud
Hai modificato i ruoli assegnati all'account di servizio predefinito di App Engine.
Per informazioni sulle tecniche di autenticazione alternative, consulta Configurare l'autenticazione per le applicazioni di produzione da server a server.
Panoramica dell'utilizzo di Memorystore
Per utilizzare Memorystore nella tua app:
Configura Memorystore for Redis, che richiede la creazione di un'istanza Redis su Memorystore e di un accesso VPC serverless che la tua app utilizza per comunicare con l' istanza Redis.
Installa una libreria client per Redis e utilizza i comandi Redis per memorizzare i dati nella cache.
Memorystore for Redis è compatibile con qualsiasi libreria client per Redis.
Vai
Questa guida descrive l'utilizzo della redigo libreria client per inviare comandi Redis dalla tua app.
Java
Questa guida descrive l'utilizzo della libreria client Jedis per inviare comandi Redis dalla tua app. Per i dettagli sull' utilizzo di Jedis, consulta il wiki di Jedis.
Node.js
Questa guida descrive l'utilizzo della node_redis libreria client per inviare comandi Redis dalla tua app.
PHP
Questa guida descrive l'utilizzo della PHPRedis libreria client per inviare comandi Redis dalla tua app.
Python
Questa guida descrive l'utilizzo della libreria client redis-py 3.0 per inviare comandi Redis dalla tua app.
Ruby
Questa guida descrive l'utilizzo della redis-rb libreria client per inviare comandi Redis dalla tua app.
Configurare Memorystore for Redis
Per configurare Memorystore for Redis:
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 l'app App Engine.
Prendi nota dell'indirizzo IP e del numero di porta dell'istanza Redis che hai creato. Utilizzerai queste informazioni quando crei un client Redis nel codice.
Collega 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.yamlcome descritto in Configurare l'app per utilizzare il connettore.
Installazione delle dipendenze
Vai
Per rendere disponibile la libreria client redigo alla tua app quando
viene eseguita in App Engine, aggiungi la libreria alle dipendenze dell'app. Ad
esempio, se utilizzi un file go.mod per dichiarare le dipendenze, aggiungi la seguente
riga al file go.mod:
module github.com/GoogleCloudPlatform/golang-samples/tree/master/memorystore/redis
Scopri di più sulla specifica delle dipendenze per la tua app Go.
Java
Per rendere disponibile la libreria client Jedis alla tua app quando viene eseguita
in App Engine, aggiungi la libreria alle dipendenze dell'app. Ad esempio,
se utilizzi Maven, aggiungi la seguente dipendenza al file pom.xml:
Node.js
Per rendere disponibile la libreria client node_redis alla tua app quando viene eseguita
in App Engine, aggiungi la libreria al file package.json dell'app.
Ad esempio:
Scopri di più sulla specifica delle dipendenze per la tua app Node.js.
PHP
Per rendere disponibile la libreria client PHPRedis alla tua app quando viene eseguita
in App Engine, aggiungi l'estensione redis.so al file php.ini dell'app.
Ad esempio:
Per ulteriori informazioni sull'attivazione delle estensioni PHP in App Engine, consulta Estensioni caricabili dinamicamente .
Python
Per rendere disponibile la libreria client redis-py alla tua app quando viene eseguita
in App Engine, aggiungi la seguente riga al file
requirements.txt dell'app:
redis
Il runtime Python 3 di App Engine caricherà automaticamente tutte le librerie
del file requirements.txt dell'app quando
esegui il deployment dell'app.
Per lo sviluppo locale, ti consigliamo di installare le dipendenze in un ambiente virtuale come venv.
Ruby
Per rendere disponibile la libreria client redis-rb alla tua app quando viene eseguita
in App Engine, aggiungi la libreria al file Gemfile dell'app.
source "https://cloud.google.com/memorystore"
gem "redis-rb"
Creazione di un client Redis
Per interagire con un database Redis, il codice deve creare un client Redis per gestire la connessione al database Redis. Le sezioni seguenti descrivono la creazione di un client Redis utilizzando la libreria client Redis.
Specifica delle variabili di ambiente
La libreria client Redis utilizza due variabili di ambiente per assemblare l'URL del database Redis:
- Una variabile per identificare l'indirizzo IP del database Redis che hai 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 anziché definirle direttamente nel codice. In questo modo è più facile eseguire l'app in ambienti diversi, ad esempio un ambiente locale e App Engine. Scopri di più sulle variabili di ambiente nella app.yaml pagina di riferimento.
Vai
Ad esempio, aggiungi le seguenti righe al file app.yaml:
env_variables:
REDISHOST: '10.112.12.112'
REDISPORT: '6379'
Java
Ad esempio, aggiungi le seguenti righe al file app.yaml:
env_variables:
redis.host: '10.112.12.112'
redis.port: '6379'
Node.js
Ad esempio, aggiungi le seguenti righe al file app.yaml:
env_variables:
REDISHOST: '10.112.12.112'
REDISPORT: '6379'
PHP
Ad esempio, aggiungi le seguenti righe al file app.yaml:
env_variables:
REDIS_HOST: '10.112.12.112'
REDIS_PORT: '6379'
Python
Ad esempio, aggiungi le seguenti righe al file app.yaml:
env_variables:
REDISHOST: '10.112.12.112'
REDISPORT: '6379'
Ruby
Ad esempio, aggiungi le seguenti righe al file app.yaml:
env_variables:
REDISHOST: '10.112.12.112'
REDISPORT: '6379'
Importazione di Redis e creazione del client
Vai
Dopo aver definito le variabili di ambiente REDISHOST e REDISPORT,
utilizza le seguenti righe per importare la libreria redigo, creare un pool di connessioni,
e recuperare un client Redis dal pool:
Java
Quando utilizzi la libreria Jedis, ti consigliamo di creare un
JedisPool e poi di utilizzare il pool per creare un client.
Le seguenti righe di codice utilizzano le variabili di ambiente redis.host e redis.port definite in precedenza per creare un pool:
Per creare un client dal pool, utilizza il metodo JedisPool.getResource().
Ad esempio:
Node.js
Dopo aver definito le variabili di ambiente REDISHOST e REDISPORT,
puoi utilizzare le seguenti righe per importare la libreria node_redis e
creare un client Redis:
PHP
Dopo aver definito le variabili di ambiente REDIS_HOST e REDIS_PORT,
puoi utilizzare le seguenti righe per creare un client Redis:
Python
Dopo aver definito le variabili di ambiente REDISHOST 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 utilizzato
la classe StrictClient anziché Client. Tuttavia, ora redis-py
consiglia Client anziché StrictClient.
Ruby
Non sono disponibili informazioni aggiuntive per questo runtime.
Utilizzare i comandi Redis per archiviare e recuperare i dati nella cache
Sebbene il database Redis di Memorystore supporti la maggior parte dei comandi Redis, devi utilizzare solo alcuni 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 scoprire come chiamare questi comandi dalla tua app, consulta la documentazione della libreria client.
| Attività | Comando Redis |
|---|---|
| Crea una voce nella cache di dati e imposta un tempo di scadenza per la voce |
SETNX MSETNX |
| Recupera i dati dalla cache | GET MGET |
| Sostituisci i valori della cache esistenti | SET MSET |
| Incrementa o decrementa i valori numerici della cache | INCR INCRBY DECR DECRBY |
| Elimina le voci dalla cache | DEL UNLINK |
| Supporta le interazioni simultanee con la cache | Consulta i dettagli sulle transazioni Redis.
Per Python, la libreria client redis-py richiede che tutte le transazioni avvengano in una pipeline. |
Testare gli aggiornamenti
Quando testi l'app localmente, valuta la possibilità di eseguire un'istanza locale di Redis per evitare di interagire con i dati di produzione (Memorystore non fornisce un emulatore). Per installare ed eseguire Redis localmente, segui le istruzioni nella documentazione di Redis. Tieni presente che al momento non è possibile eseguire Redis localmente su Windows.
Per ulteriori informazioni sul test delle app, consulta Test e deployment dell'applicazione.
Eseguire il deployment dell'app
Una volta che 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 gradualmente il traffico per l'app aggiornata. Monitora attentamente l'app per verificare la presenza di problemi con il database prima di indirizzare altro traffico all'app aggiornata.