1. Übersicht
Memorystore for Redis ist ein vollständig verwalteter Redis-Dienst für Google Cloud. Anwendungen, die in Google Cloud ausgeführt werden, können durch die Nutzung des hochskalierbaren, verfügbaren und sicheren Redis-Dienstes eine extrem hohe Leistung erzielen, ohne komplexe Redis-Bereitstellungen verwalten zu müssen. Es kann als Back-End für das Daten-Caching verwendet werden, um die Leistung von Spring Boot-Anwendungen zu verbessern. Im Codelab wird die Einrichtung erklärt.
Aufgaben in diesem Lab
- So verwenden Sie Memorystore als Cache-Back-End für eine Spring Boot-Anwendung.
Voraussetzungen
- Ein Google Cloud-Projekt
- Ein Browser, z. B. Google Chrome
- Erfahrung mit standardmäßigen Linux-Texteditoren wie Vim, Emacs und GNU Nano
Wie werden Sie das Codelab verwenden?
<ph type="x-smartling-placeholder">Wie würden Sie Ihre Erfahrung mit Google Cloud-Diensten bewerten?
<ph type="x-smartling-placeholder">2. Einrichtung und Anforderungen
Umgebung für das selbstbestimmte Lernen einrichten
- Melden Sie sich in der Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn Sie noch kein Gmail- oder G Suite-Konto haben, müssen Sie ein Konto erstellen.
Notieren Sie sich die Projekt-ID, also den projektübergreifend nur einmal vorkommenden Namen eines Google Cloud-Projekts. Der oben angegebene Name ist bereits vergeben und kann leider nicht mehr verwendet werden. Sie wird in diesem Codelab später als PROJECT_ID
bezeichnet.
- Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Google Cloud-Ressourcen nutzen zu können.
Dieses Codelab sollte ohne großen Aufwand betrieben werden. Folgen Sie der Anleitung im Abschnitt „Bereinigen“, . Hier erfahren Sie, wie Sie Ressourcen herunterfahren, damit Ihnen über dieses Tutorial hinaus keine Kosten entstehen. Neue Google Cloud-Nutzer können an der kostenlosen Testversion von 300$ teilnehmen.
Cloud Shell aktivieren
- Klicken Sie in der Cloud Console auf Cloud Shell aktivieren .
Wenn Sie Cloud Shell zum ersten Mal verwenden, wird ein Zwischenbildschirm (below the fold) angezeigt, in dem beschrieben wird, worum es sich dabei handelt. Klicken Sie in diesem Fall auf Weiter. Der Chat wird nie wieder angezeigt. So sieht dieser einmalige Bildschirm aus:
Die Bereitstellung und Verbindung mit Cloud Shell dauert nur einen Moment.
Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und wird in Google Cloud ausgeführt. Dadurch werden die Netzwerkleistung und die Authentifizierung erheblich verbessert. Viele, wenn nicht sogar alle Arbeiten in diesem Codelab können Sie ganz einfach mit einem Browser oder Ihrem Chromebook erledigen.
Sobald Sie mit Cloud Shell verbunden sind, sollten Sie sehen, dass Sie bereits authentifiziert sind und dass das Projekt bereits auf Ihre Projekt-ID eingestellt ist.
- Führen Sie in Cloud Shell den folgenden Befehl aus, um zu prüfen, ob Sie authentifiziert sind:
gcloud auth list
Befehlsausgabe
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
Befehlsausgabe
[core] project = <PROJECT_ID>
Ist dies nicht der Fall, können Sie die Einstellung mit diesem Befehl vornehmen:
gcloud config set project <PROJECT_ID>
Befehlsausgabe
Updated property [core/project].
3. Memorystore for Redis-Instanz einrichten
Starten Sie Cloud Shell.
Verwenden Sie nach dem Start von Cloud Shell die Befehlszeile, um die Memorystore API zu aktivieren und eine neue Memorystore-Instanz zu erstellen.
$ gcloud services enable redis.googleapis.com $ gcloud redis instances create myinstance --size=1 --region=us-central1
Nach Abschluss des Vorgangs kann die Instanz verwendet werden.
Rufen Sie mit dem folgenden Befehl die IP-Adresse von redis host ip-address der Instanz ab. Sie werden ihn später bei der Konfiguration Ihrer Spring Boot-Anwendung wieder verwenden.
$ gcloud redis instances describe myinstance --region=us-central1 \ | grep host host: 10.0.0.4
Gehen Sie in der Google Cloud Console zu Datenbanken > Memorystore > Redis: Die Instanz sollte sich im Status „Ready“ befinden. Bundesstaat :
4. Compute Engine-Instanz einrichten
Erstellen Sie eine Compute Engine-Instanz in derselben Region.
$ gcloud compute instances create instance-1 --zone us-central1-c
Nach Abschluss des Vorgangs kann die Instanz verwendet werden.
Stellen Sie mit dem folgenden Befehl über SSH eine Verbindung zu Ihrer Instanz her:
$ gcloud compute ssh instance-1 --zone us-central1-c
Alternativ können Sie zu Compute gehen > Compute Engine > VM-Instanzen und klicken Sie in der Spalte Verbinden auf SSH:
Installieren Sie in der Shell der VM-Instanz (nicht Cloud Shell) die OpenJDK-, Maven- und Redis-Tools:
$ sudo apt-get install openjdk-17-jdk-headless maven redis-tools
Warten Sie, bis die Installation abgeschlossen ist, und fahren Sie dann mit dem nächsten Schritt fort.
5. Spring Boot-Anwendung einrichten
Erstellen Sie ein neues Spring Boot-Projekt mit den Abhängigkeiten web
, redis
und 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
Bearbeiten Sie die Datei application.properties
, um die Anwendung so zu konfigurieren, dass sie die IP-Adresse der Memorystore-Instanz für Redis-Host verwendet.
$ nano src/main/resources/application.properties
Fügen Sie die folgende Zeile mit Ihrer Memorystore for Redis-IP-Adresse (vor ein paar Schritten) hinzu:
spring.data.redis.host=<memorystore-host-ip-address>
Fügen Sie danach eine neue Zeile hinzu und erstellen Sie eine Java-Klasse für den REST-Controller:
$ nano src/main/java/com/example/demo/HelloWorldController.java
Speichern Sie die folgenden Inhalte in der Datei:
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;
}
}
Die Annotation @RequestMapping
stellt die Methode als HTTP-Endpunkt bereit und ordnet einen Teil des Pfads einem Methodenparameter zu (wie durch die Annotation @PathVariable
angegeben).
Die Anmerkung @Cacheable("hello")
gibt an, dass die Methodenausführung im Cache gespeichert werden soll und der Cache-Name „hello
“ lautet. Er wird in Kombination mit dem Parameterwert als Cache-Schlüssel verwendet. Im Code-Lab sehen Sie später ein Beispiel.
Als Nächstes aktivieren wir das Caching in der Spring Boot-Anwendungsklasse. DemoApplication.java
bearbeiten:
$ nano src/main/java/com/example/demo/DemoApplication.java
Importieren Sie org.springframework.cache.annotation.EnableCaching
und annotieren Sie die Klasse mit dieser Annotation. Das Ergebnis sollte wie folgt aussehen:
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. Anwendung ausführen und auf den Endpunkt zugreifen
JAVA_HOME
muss auf die richtige Version eingestellt sein:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
Jetzt können Sie die App ausführen.
$ mvn spring-boot:run
Stellen Sie auf die gleiche Weise wie zuvor eine weitere SSH-Verbindung zu Ihrer Instanz her. Greifen Sie im neuen SSH-Fenster mehrmals auf den Endpunkt /hello/
zu und übergeben Sie "bob
". als Namen.
$ 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
Die erste Anfrage dauerte fünf Sekunden. Die nächste war jedoch deutlich schneller, obwohl die Methode den Thread.sleep(5000)
-Aufruf enthält. Das liegt daran, dass die eigentliche Methode nur einmal ausgeführt und das Ergebnis in den Cache gestellt wurde. Bei jedem nachfolgenden Aufruf wird das Ergebnis direkt aus dem Cache zurückgegeben.
7. Im Cache gespeicherte Objekte prüfen
Sie können genau sehen, was die Anwendung im Cache gespeichert hat. Stellen Sie über dasselbe Terminal, das Sie im vorherigen Schritt verwendet haben, mit redis-cli eine Verbindung zum Memorystore for Redis-Host her:
$ redis-cli -h <memorystore-host-ip-address>
Verwenden Sie den folgenden Befehl, um die Liste der Cache-Schlüssel aufzurufen:
:6379> KEYS * 1) "hello::bob"
Wie Sie sehen, wird der Cache-Name als Präfix für den Schlüssel und der Parameterwert als zweiter Teil verwendet.
Verwenden Sie den Befehl GET
, um den Wert abzurufen:
:6379> GET hello::bob Hello bob!
Verwenden Sie zum Beenden den Befehl exit
.
8. Bereinigen
Löschen Sie zum Bereinigen Compute Engine- und Memorystore-Instanzen aus Cloud Shell.
Löschen Sie die Compute-Instanz:
$ gcloud compute instances delete instance-1 --zone us-central1-c
Löschen Sie die Memorystore for Redis-Instanz:
$ gcloud redis instances delete myinstance --region=us-central1
9. Glückwunsch!
Sie haben Memorystore for Redis und eine Compute Engine-Instanz erstellt. Außerdem haben Sie eine Spring Boot-Anwendung so konfiguriert, dass Memorystore mit Spring Boot-Caching verwendet wird.
Weitere Informationen
Lizenz
Dieser Text ist mit einer Creative Commons Attribution 2.0 Generic License lizenziert.