Memorystore for Redis to w pełni zarządzana usługa 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 konfiguracji.
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?
Samodzielne konfigurowanie środowiska
Jeśli nie masz jeszcze konta Google (Gmail lub Google Apps), musisz je utworzyć. Zaloguj się w konsoli Google Cloud Platform (console.cloud.google.com) i utwórz nowy projekt:
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ć płatności w konsoli Cloud, aby móc korzystać z zasobów Google Cloud.
Wykonanie tego samouczka nie powinno kosztować więcej niż kilka dolarów, ale może okazać się droższe, jeśli zdecydujesz się wykorzystać więcej zasobów lub pozostawisz je uruchomione (patrz sekcja „Czyszczenie” na końcu tego dokumentu).
Nowi użytkownicy Google Cloud Platform mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.
Aktywuj Google Cloud Shell
W konsoli GCP kliknij ikonę Cloud Shell na pasku narzędzi w prawym górnym rogu:
Następnie kliknij „Uruchom Cloud Shell”:
Udostępnienie środowiska i połączenie się z nim powinno zająć tylko kilka chwil:
Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i uwierzytelniania. Większość, jeśli nie wszystkie, zadań w tym laboratorium można wykonać za pomocą przeglądarki lub Chromebooka Google.
Po połączeniu z Cloud Shell zobaczysz, że jesteś już uwierzytelniony, a projekt jest już ustawiony na PROJECT_ID.
Aby potwierdzić, że masz autoryzację, uruchom w Cloud Shell to polecenie:
gcloud auth list
Wynik polecenia
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Wynik polecenia
[core] project = <PROJECT_ID>
Jeśli nie, możesz ustawić go za pomocą tego polecenia:
gcloud config set project <PROJECT_ID>
Wynik polecenia
Updated property [core/project].
Uruchom Cloud Shell.
Po uruchomieniu Cloud Shell możesz utworzyć nową instancję Memorystore za pomocą wiersza poleceń.
$ gcloud redis instances create myinstance --size=1 --region=us-central1
Jeśli interfejs Memorystore API nie jest włączony, pojawi się pytanie, czy chcesz go włączyć. Odpowiedz y.
API [redis.googleapis.com] not enabled on project [204466653457]. Would you like to enable and retry (this will take a few minutes)? (y/N)? y Enabling service redis.googleapis.com on project 204166153457... Waiting for async operation operations/tmo-acf.c8909997-1b4e-1a62-b6f5-7da75cce1416 to complete... Operation finished successfully. The following command can describe the Operation details: gcloud services operations describe operations/tmo-acf.c8909997-1b4e-1a62-b6f5-7da75cce1416 Create request issued for: [myinstance] Waiting for operation [operation-1538645026454-57763b937ad39-2564ab37-3fea7701] to complete...done. Created instance [myinstance].
Po zakończeniu operacji instancja będzie gotowa do użycia.
Aby uzyskać adres IP hosta Redis instancji, uruchom to polecenie. 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
Jeśli w konsoli Google Cloud otworzysz Storage (Przechowywanie) > Memorystore, powinna być widoczna instancja w stanie „gotowa”:
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. W tym celu otwórz Compute > Compute Engine > Instancje maszyn wirtualnych i w kolumnie Połącz kliknij SSH:
W powłoce instancji maszyny wirtualnej (nie w Cloud Shell) zainstaluj OpenJDK, Maven i telnet:
$ sudo apt-get install openjdk-8-jdk-headless maven telnet
Poczekaj na zakończenie instalacji, a potem przejdź do następnego kroku.
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 \ | 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 poprzednich kroków):
spring.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")
wskazuje, ż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.
Musisz też włączyć 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ęć 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); } }
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.
Możesz dokładnie sprawdzić, co aplikacja zapisała w pamięci podręcznej. Z tego samego terminala, którego używasz w poprzednim kroku, połącz się z hostem Memorystore for Redis za pomocą telnetu:
$ telnet <memorystore-host-ip-address> 6379
Aby wyświetlić listę kluczy pamięci podręcznej, użyj tego polecenia:
KEYS * 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
:
$ GET hello::bob Hello bob!
Aby wyjść, użyj polecenia QUIT
.
Aby przeprowadzić czyszczenie, 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
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
- Projekt Spring on Google Cloud
- 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.