О практической работе
1. Обзор
Memorystore for Redis — это полностью управляемая служба Redis для Google Cloud. Приложения, работающие в Google Cloud, могут достигать максимальной производительности за счет использования масштабируемой, доступной и безопасной службы Redis без необходимости управления сложными развертываниями Redis. Его можно использовать в качестве серверной части для кэширования данных для повышения производительности приложений Spring Boot. Codelab объясняет, как его настроить.
Что вы узнаете
- Как использовать Memorystore в качестве бэкенда кеша для приложения Spring Boot.
Что вам понадобится
- Облачный проект Google
- Браузер, например Google Chrome
- Знакомство со стандартными текстовыми редакторами Linux, такими как Vim, Emacs и GNU Nano.
Как вы будете использовать лабораторию кода?
Как бы вы оценили свой опыт работы с сервисами Google Cloud?
2. Установка и требования
Самостоятельная настройка среды
Если у вас еще нет учетной записи Google (Gmail или Google Apps), вы должны создать ее. Войдите в консоль Google Cloud Platform ( console.cloud.google.com ) и создайте новый проект:
Запомните идентификатор проекта, уникальное имя для всех проектов Google Cloud (имя выше уже занято и не будет работать для вас, извините!). Позже в этой кодовой лаборатории он будет упоминаться как PROJECT_ID
.
Затем вам нужно включить выставление счетов в облачной консоли, чтобы использовать ресурсы Google Cloud.
Прохождение этой кодовой лаборатории не должно стоить вам больше нескольких долларов, но может стоить больше, если вы решите использовать больше ресурсов или оставите их работающими (см. раздел «Очистка» в конце этого документа).
Новые пользователи Google Cloud Platform имеют право на бесплатную пробную версию стоимостью 300 долларов США .
Активировать облачную оболочку Google
В консоли GCP щелкните значок Cloud Shell на верхней правой панели инструментов:
Затем нажмите «Запустить Cloud Shell»:
Подготовка и подключение к среде займет всего несколько минут:
Эта виртуальная машина загружена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог размером 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Многое, если не все, из вашей работы в этом лабораторном занятии можно выполнить просто с помощью браузера или вашего Google Chromebook.
После подключения к Cloud Shell вы должны увидеть, что вы уже прошли аутентификацию и что для проекта уже задан ваш PROJECT_ID .
Выполните следующую команду в Cloud Shell, чтобы подтвердить, что вы прошли аутентификацию:
gcloud auth list
Вывод команды
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Вывод команды
[core] project = <PROJECT_ID>
Если это не так, вы можете установить его с помощью этой команды:
gcloud config set project <PROJECT_ID>
Вывод команды
Updated property [core/project].
3. Настройте хранилище памяти для экземпляра Redis
Запустите Облачную оболочку.
После запуска Cloud Shell вы можете использовать командную строку для создания нового экземпляра Memorystore.
$ gcloud redis instances create myinstance --size=1 --region=us-central1
Если API Memorystore не был включен, вас спросят, хотите ли вы его включить. Ответить й .
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].
После завершения операции ваш экземпляр будет готов к использованию.
Получите IP-адрес хоста redis экземпляра, выполнив следующую команду. Вы будете использовать его позже при настройке приложения Spring Boot.
$ gcloud redis instances describe myinstance --region=us-central1 \ | grep host host: 10.0.0.4
Если вы перейдете в Storage > Memorystore в Google Cloud Console, вы сможете увидеть свой экземпляр в состоянии «готово»:
4. Настройка экземпляра Compute Engine
Создайте экземпляр Compute Engine в том же регионе.
$ gcloud compute instances create instance-1 --zone us-central1-c
После завершения операции ваш экземпляр будет готов к использованию.
Подключитесь к своему экземпляру через SSH, выбрав Compute > Compute Engine > VM instances и нажав SSH в столбце Connect :
В оболочке экземпляра виртуальной машины (ВМ) (не Cloud Shell) установите OpenJDK, Maven, telnet:
$ sudo apt-get install openjdk-8-jdk-headless maven telnet
Дождитесь завершения установки и перейдите к следующему шагу.
5. Настройте приложение Spring Boot
Создайте новый проект Spring Boot с зависимостями web
, redis
и 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
Отредактируйте application.properties
файл, чтобы настроить приложение для использования IP-адреса экземпляра Memorystore для хоста Redis.
$ nano src/main/resources/application.properties
Добавьте следующую строку с вашим IP-адресом Memorystore для Redis (сделанным пару шагов назад):
spring.redis.host=<memorystore-host-ip-address>
Добавьте после этого новую строку и создайте класс Java контроллера REST:
$ nano src/main/java/com/example/demo/HelloWorldController.java
Поместите в файл следующее содержимое:
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; } }
Аннотация @RequestMapping
предоставляет метод как конечную точку HTTP и сопоставляет часть пути с параметром метода (как указано в аннотации @PathVariable
).
@Cacheable("hello")
указывает, что выполнение метода должно кэшироваться, а имя кеша — " hello
". Он используется в сочетании со значением параметра в качестве ключа кэша. Позже вы увидите пример в лаборатории кода.
Кроме того, вам необходимо включить кэширование в классе приложения Spring Boot.
Отредактируйте DemoApplication.java
:
$ nano src/main/java/com/example/demo/DemoApplication.java
Импортируйте org.springframework.cache.annotation.EnableCaching
и аннотируйте класс этой аннотацией. Результат должен выглядеть так:
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. Запустите приложение и получите доступ к конечной точке
Теперь вы готовы запустить приложение!
$ mvn spring-boot:run
Откройте еще одно SSH-соединение с вашим экземпляром так же, как вы это делали ранее. В новом окне SSH несколько раз получите доступ к конечной точке /hello/
, передав « bob
» в качестве имени.
$ 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
Обратите внимание, что в первый раз запрос занял пять секунд, но следующий был значительно быстрее, несмотря на то, что у вас есть Thread.sleep(5000)
в методе. Это потому, что фактический метод был выполнен только один раз, а результат был помещен в кеш. Каждый последующий вызов возвращает результат непосредственно из кеша.
7. Просмотр кэшированных объектов
На самом деле вы можете увидеть, что именно кэшировало приложение. С того же терминала, который вы использовали на предыдущем шаге, подключитесь к узлу Memorystore for Redis с помощью telnet:
$ telnet <memorystore-host-ip-address> 6379
Чтобы просмотреть список ключей кэша, используйте следующую команду:
KEYS * hello::bob
Как видите, имя кеша используется в качестве префикса для ключа, а значение параметра — в качестве второй части.
Чтобы получить значение, используйте команду GET
:
$ GET hello::bob Hello bob!
Используйте команду QUIT
для выхода.
8. Очистить
Для очистки удалите экземпляры Compute Engine и Memorystore из Cloud Shell.
Удалите вычислительный экземпляр:
$ gcloud compute instances delete instance-1 --zone us-central1-c
Удалите экземпляр Memorystore для Redis:
$ gcloud redis instances delete myinstance --region=us-central1
9. Поздравляем!
Вы создали Memorystore для Redis и экземпляр Compute Engine. Кроме того, вы настроили приложение Spring Boot для использования Memorystore с кэшированием Spring Boot !
Учить больше
- Кэширование весенней загрузки
- Память
- Весна в проекте Google Cloud
- Spring в репозитории Google Cloud GitHub
- Java в облаке Google
Лицензия
Эта работа находится под лицензией Creative Commons Attribution 2.0 Generic License.