1. Panoramica
Memorystore for Redis è un servizio Redis completamente gestito per Google Cloud. Le app in esecuzione su Google Cloud possono raggiungere prestazioni elevate utilizzando il servizio Redis, estremamente sicuro, disponibile e scalabile, senza il carico di dover gestire complessi deployment Redis. Può essere utilizzato come backend per la memorizzazione nella cache dei dati per migliorare le prestazioni delle app Spring Boot. Il codelab spiega come configurarlo.
Cosa imparerai a fare
- Come utilizzare Memorystore come backend della cache per un'app Spring Boot.
Che cosa ti serve
- Un progetto Google Cloud
- Un browser, ad esempio Google Chrome
- Familiarità con gli editor di testo standard di Linux, ad esempio Vim, Emacs e GNU Nano
Come utilizzerai il codelab?
Come valuteresti la tua esperienza con i servizi Google Cloud?
2. Configurazione e requisiti
Configurazione dell'ambiente autonomo
- Accedi alla console Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai già un account Gmail o G Suite, devi crearne uno.
Ricorda l'ID progetto, un nome univoco tra tutti i progetti Google Cloud (il nome sopra è già stato utilizzato e non funzionerà per te, mi dispiace). In questo codelab verrà chiamato PROJECT_ID.
- Successivamente, dovrai abilitare la fatturazione in Cloud Console per utilizzare le risorse Google Cloud.
L'esecuzione di questo codelab non dovrebbe costare molto, se non nulla. Assicurati di seguire le istruzioni riportate nella sezione "Pulizia", che ti consiglia come arrestare le risorse in modo da non incorrere in addebiti oltre questo tutorial. I nuovi utenti di Google Cloud possono beneficiare del programma prova senza costi di 300$.
Attiva Cloud Shell
- Nella console Cloud, fai clic su Attiva Cloud Shell
.
Se non hai mai avviato Cloud Shell, viene visualizzata una schermata intermedia (sotto la piega) che ne descrive le funzionalità. In questo caso, fai clic su Continua e non comparirà più. Ecco come si presenta la schermata intermedia:
Bastano pochi istanti per eseguire il provisioning e connettersi a Cloud Shell.
Questa macchina virtuale è caricata con tutti gli strumenti per sviluppatori di cui avrai bisogno. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni e l'autenticazione della rete. Gran parte del lavoro per questo codelab, se non tutto, può essere svolto semplicemente con un browser o con Chromebook.
Una volta eseguita la connessione a Cloud Shell, dovresti vedere che il tuo account è già autenticato e il progetto è già impostato sul tuo ID progetto.
- Esegui questo comando in Cloud Shell per verificare che l'account sia autenticato:
gcloud auth list
Output comando
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
gcloud config list project
Output comando
[core] project = <PROJECT_ID>
In caso contrario, puoi impostarlo con questo comando:
gcloud config set project <PROJECT_ID>
Output comando
Updated property [core/project].
3. Configurare un'istanza Memorystore for Redis
Avvia Cloud Shell.
Dopo l'avvio di Cloud Shell, utilizza la riga di comando per attivare l'API Memorystore e creare una nuova istanza Memorystore.
$ gcloud services enable redis.googleapis.com $ gcloud redis instances create myinstance --size=1 --region=us-central1
Al termine dell'operazione, l'istanza sarà pronta per l'uso.
Recupera l'indirizzo IP host Redis dell'istanza eseguendo questo comando. Lo utilizzerai di nuovo in un secondo momento durante la configurazione dell'app Spring Boot.
$ gcloud redis instances describe myinstance --region=us-central1 \ | grep host host: 10.0.0.4
Nella console Google Cloud, vai a Database > Memorystore > Redis. L'istanza deve essere nello stato "Pronto":

4. Configura un'istanza Compute Engine
Crea un'istanza Compute Engine nella stessa regione.
$ gcloud compute instances create instance-1 --zone us-central1-c
Al termine dell'operazione, l'istanza sarà pronta per l'uso.
Connettiti all'istanza tramite SSH con il seguente comando:
$ gcloud compute ssh instance-1 --zone us-central1-c
In alternativa, vai a Compute > Compute Engine > Istanze VM e fai clic su SSH nella colonna Connetti:

Nella shell dell'istanza di macchina virtuale (VM) (non Cloud Shell), installa OpenJDK, Maven e gli strumenti Redis:
$ sudo apt-get install openjdk-17-jdk-headless maven redis-tools
Attendi il completamento dell'installazione, quindi procedi al passaggio successivo.
5. Configurare un'app Spring Boot
Crea un nuovo progetto Spring Boot con le dipendenze web, redis e cache:
$ curl https://start.spring.io/starter.tgz \ -d dependencies=web,redis,cache -d language=java -d baseDir=cache-app \ -d type=maven-project \ | tar -xzvf - && cd cache-app
Modifica il file application.properties per configurare l'app in modo che utilizzi l'indirizzo IP dell'istanza Memorystore per l'host Redis.
$ nano src/main/resources/application.properties
Aggiungi la seguente riga con l'indirizzo IP di Memorystore for Redis (di un paio di passaggi fa):
spring.data.redis.host=<memorystore-host-ip-address>
Aggiungi una nuova riga e crea una classe Java del controller REST:
$ nano src/main/java/com/example/demo/HelloWorldController.java
Inserisci i seguenti contenuti nel file:
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloWorldController {
@Autowired
private StringRedisTemplate template;
@RequestMapping("/hello/{name}")
@Cacheable("hello")
public String hello(@PathVariable String name) throws InterruptedException {
Thread.sleep(5000);
return "Hello " + name;
}
}
L'annotazione @RequestMapping espone il metodo come endpoint HTTP e mappa parte del percorso a un parametro del metodo (come indicato dall'annotazione @PathVariable).
L'annotazione @Cacheable("hello") indica che l'esecuzione del metodo deve essere memorizzata nella cache e che il nome della cache è "hello". Viene utilizzata in combinazione con il valore del parametro come chiave cache. Vedrai un esempio più avanti nel codelab.
Dopodiché, attiveremo la memorizzazione nella cache nella classe dell'app Spring Boot. Modifica DemoApplication.java:
$ nano src/main/java/com/example/demo/DemoApplication.java
Importa org.springframework.cache.annotation.EnableCaching e annota il corso con questa annotazione. Il risultato dovrebbe essere simile a questo:
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
@SpringBootApplication
@EnableCaching
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
6. Esegui l'app e accedi all'endpoint
Assicurati che JAVA_HOME sia impostato sulla versione corretta:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
Ora puoi eseguire l'app.
$ mvn spring-boot:run
Apri un'altra connessione SSH all'istanza nello stesso modo in cui hai fatto in precedenza. Nella nuova finestra SSH, accedi più volte all'endpoint /hello/, passando "bob" come nome.
$ time curl http://localhost:8080/hello/bob Hello bob! real 0m5.408s user 0m0.036s sys 0m0.009s $ time curl http://localhost:8080/hello/bob Hello bob! real 0m0.092s user 0m0.021s sys 0m0.027s
Nota che la prima volta la richiesta ha impiegato cinque secondi, ma la successiva è stata molto più veloce nonostante l'invocazione Thread.sleep(5000) nel metodo. Questo perché il metodo effettivo è stato eseguito una sola volta e il risultato è stato inserito nella cache. Ogni chiamata successiva restituisce il risultato direttamente dalla cache.
7. Esaminare gli oggetti memorizzati nella cache
Puoi vedere esattamente cosa ha memorizzato nella cache l'app. Dallo stesso terminale utilizzato nel passaggio precedente, connettiti all'host Memorystore for Redis utilizzando redis-cli:
$ redis-cli -h <memorystore-host-ip-address>
Per visualizzare l'elenco delle chiavi della cache, utilizza il seguente comando:
:6379> KEYS * 1) "hello::bob"
Come puoi vedere, il nome della cache viene utilizzato come prefisso per la chiave e il valore del parametro viene utilizzato come seconda parte.
Per recuperare il valore, utilizza il comando GET:
:6379> GET hello::bob Hello bob!
Utilizza il comando exit per uscire.
8. Esegui la pulizia
Per eseguire la pulizia, elimina le istanze Compute Engine e Memorystore da Cloud Shell.
Elimina l'istanza di calcolo:
$ gcloud compute instances delete instance-1 --zone us-central1-c
Elimina l'istanza Memorystore for Redis:
$ gcloud redis instances delete myinstance --region=us-central1
9. Complimenti!
Hai creato Memorystore for Redis e un'istanza Compute Engine. Inoltre, hai configurato un'app Spring Boot per utilizzare Memorystore con la memorizzazione nella cache di Spring Boot.
Scopri di più
- Memorizzazione nella cache di Spring Boot
- Memorystore
- Repository GitHub di Spring su Google Cloud
- Java su Google Cloud
Licenza
Questo lavoro è concesso in licenza ai sensi di una licenza Creative Commons Attribution 2.0 Generic.