1. Przegląd
Memorystore for Redis to usługa w pełni zarządzana Redis dla Google Cloud. Aplikacje działające w Google Cloud mogą osiągać ekstremalną wydajność dzięki wysoce skalowalnej, dostępnej i bezpiecznej usłudze Redis bez konieczności zarządzania złożonymi wdrożeniami Redis. Może być używany jako backend do buforowania danych, aby zwiększyć wydajność aplikacji Spring Boot. W tym samouczku znajdziesz instrukcje, jak to zrobić.
Czego się nauczysz
- Jak używać Memorystore jako backendu pamięci podręcznej w aplikacji Spring Boot.
Czego potrzebujesz
- projekt Google Cloud,
- przeglądarka, np. Google Chrome;
- Znajomość standardowych edytorów tekstu systemu Linux, takich jak Vim, Emacs i GNU Nano
Jak zamierzasz wykorzystać ten codelab?
Jak oceniasz korzystanie z usług Google Cloud?
2. Konfiguracja i wymagania
Samodzielne konfigurowanie środowiska
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. (Jeśli nie masz jeszcze konta Gmail lub G Suite, musisz je utworzyć).
Zapamiętaj identyfikator projektu, czyli unikalną nazwę we wszystkich projektach Google Cloud (podana powyżej nazwa jest już zajęta i nie będzie działać w Twoim przypadku). W dalszej części tego laboratorium będzie on nazywany PROJECT_ID.
- Następnie musisz włączyć rozliczenia w konsoli Cloud, aby korzystać z zasobów Google Cloud.
Ukończenie tego laboratorium nie powinno wiązać się z dużymi kosztami, a nawet z żadnymi. Wykonaj instrukcje z sekcji „Czyszczenie”, w której znajdziesz informacje o tym, jak wyłączyć zasoby, aby uniknąć naliczenia opłat po zakończeniu tego samouczka. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.
Aktywowanie Cloud Shell
- W konsoli Cloud kliknij Aktywuj Cloud Shell
.
Jeśli uruchamiasz Cloud Shell po raz pierwszy, zobaczysz ekran pośredni (część strony widoczna po przewinięciu) z opisem tego środowiska. W takim przypadku kliknij Dalej, a ten ekran nie będzie się już wyświetlać. Ten wyświetlany jednorazowo ekran wygląda tak:
Uzyskanie dostępu do środowiska Cloud Shell i połączenie się z nim powinno zająć tylko kilka chwil.
Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. Większość zadań w tym module, a być może wszystkie, możesz wykonać w przeglądarce lub na Chromebooku.
Po połączeniu z Cloud Shell zobaczysz, że uwierzytelnianie zostało już przeprowadzone, a projekt jest już ustawiony na Twój identyfikator projektu.
- Aby potwierdzić, że uwierzytelnianie zostało przeprowadzone, uruchom w Cloud Shell to polecenie:
gcloud auth list
Wynik polecenia
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
gcloud config list project
Wynik polecenia
[core] project = <PROJECT_ID>
Jeśli nie, możesz go ustawić za pomocą tego polecenia:
gcloud config set project <PROJECT_ID>
Wynik polecenia
Updated property [core/project].
3. Konfigurowanie instancji Memorystore for Redis
Uruchom Cloud Shell.
Po uruchomieniu Cloud Shell użyj wiersza poleceń, aby włączyć interfejs Memorystore API i utworzyć nową instancję Memorystore.
$ gcloud services enable redis.googleapis.com $ gcloud redis instances create myinstance --size=1 --region=us-central1
Po zakończeniu operacji instancja będzie gotowa do użycia.
Uruchom to polecenie, aby uzyskać adres IP hosta Redis instancji. Użyjesz go ponownie później podczas konfigurowania aplikacji Spring Boot.
$ gcloud redis instances describe myinstance --region=us-central1 \ | grep host host: 10.0.0.4
W konsoli Google Cloud otwórz Bazy danych > Memorystore > Redis. Instancja powinna być w stanie „gotowa”:

4. Konfigurowanie instancji Compute Engine
Utwórz instancję Compute Engine w tym samym regionie.
$ gcloud compute instances create instance-1 --zone us-central1-c
Po zakończeniu operacji instancja będzie gotowa do użycia.
Połącz się z instancją przez SSH za pomocą tego polecenia:
$ gcloud compute ssh instance-1 --zone us-central1-c
Możesz też otworzyć Compute > Compute Engine > Instancje maszyn wirtualnych i kliknąć SSH w kolumnie Połącz:

W powłoce instancji maszyny wirtualnej (nie w Cloud Shell) zainstaluj OpenJDK, Maven i narzędzia Redis:
$ sudo apt-get install openjdk-17-jdk-headless maven redis-tools
Poczekaj na zakończenie instalacji, a potem przejdź do następnego kroku.
5. Konfigurowanie aplikacji Spring Boot
Utwórz nowy projekt Spring Boot z zależnościami web, redis i 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
Edytuj plik application.properties, aby skonfigurować aplikację do używania adresu IP instancji Memorystore for Redis jako hosta.
$ nano src/main/resources/application.properties
Dodaj ten wiersz z adresem IP Memorystore for Redis (z kilku poprzednich kroków):
spring.data.redis.host=<memorystore-host-ip-address>
Dodaj po nim nowy wiersz i utwórz klasę Java kontrolera REST:
$ nano src/main/java/com/example/demo/HelloWorldController.java
Wklej do pliku tę zawartość:
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;
}
}
Adnotacja @RequestMapping udostępnia metodę jako punkt końcowy HTTP i mapuje część ścieżki na parametr metody (wskazany przez adnotację @PathVariable).
Adnotacja @Cacheable("hello") oznacza, że wykonanie metody powinno być przechowywane w pamięci podręcznej, a nazwa pamięci podręcznej to „hello”. Jest ona używana w połączeniu z wartością parametru jako klucz pamięci podręcznej. Przykład zobaczysz w dalszej części tego modułu.
Następnie włączymy buforowanie w klasie aplikacji Spring Boot. Edytuj: DemoApplication.java
$ nano src/main/java/com/example/demo/DemoApplication.java
Importuj org.springframework.cache.annotation.EnableCaching i dodaj do zajęć tę adnotację. Wynik powinien wyglądać tak:
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. Uruchom aplikację i uzyskaj dostęp do punktu końcowego
Sprawdź, czy JAVA_HOME jest ustawiony na odpowiednią wersję:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
Możesz teraz uruchomić aplikację.
$ mvn spring-boot:run
Otwórz kolejne połączenie SSH z instancją w taki sam sposób jak wcześniej. W nowym oknie SSH uzyskaj dostęp do punktu końcowego /hello/ kilka razy, przekazując „bob” jako nazwę.
$ 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
Zauważ, że pierwsze żądanie zajęło 5 sekund, a kolejne było znacznie szybsze, mimo że w metodzie masz Thread.sleep(5000)invocation. Dzieje się tak, ponieważ rzeczywista metoda została wykonana tylko raz, a wynik został umieszczony w pamięci podręcznej. Każde kolejne wywołanie zwraca wynik bezpośrednio z pamięci podręcznej.
7. Sprawdzanie obiektów w pamięci podręcznej
Możesz dokładnie sprawdzić, co aplikacja zapisała w pamięci podręcznej. W tym samym terminalu, którego używasz w poprzednim kroku, połącz się z hostem Memorystore for Redis za pomocą narzędzia redis-cli:
$ redis-cli -h <memorystore-host-ip-address>
Aby wyświetlić listę kluczy pamięci podręcznej, użyj tego polecenia:
:6379> KEYS * 1) "hello::bob"
Jak widać, nazwa pamięci podręcznej jest używana jako prefiks klucza, a wartość parametru jako druga część.
Aby pobrać wartość, użyj polecenia GET:
:6379> GET hello::bob Hello bob!
Aby wyjść, użyj polecenia exit.
8. Czyszczenie danych
Aby zwolnić miejsce, usuń instancje Compute Engine i Memorystore z Cloud Shell.
Usuń instancję obliczeniową:
$ gcloud compute instances delete instance-1 --zone us-central1-c
Usuń instancję Memorystore for Redis:
$ gcloud redis instances delete myinstance --region=us-central1
9. Gratulacje!
Utworzono instancję Memorystore for Redis i instancję Compute Engine. Skonfigurowaliśmy też aplikację Spring Boot, aby korzystała z Memorystore z pamięcią podręczną Spring Boot.
Więcej informacji
- Buforowanie w Spring Boot
- Memorystore
- Repozytorium GitHub Spring on Google Cloud
- Java w Google Cloud
Licencja
To zadanie jest licencjonowane na podstawie ogólnej licencji Creative Commons Attribution 2.0.