1. Обзор
Memorystore для Redis — это полностью управляемый сервис Redis для Google Cloud. Приложения, работающие в Google Cloud, могут достичь высочайшей производительности за счет использования масштабируемого, доступного и безопасного сервиса Redis без бремени управления сложными развертываниями Redis. Его можно использовать в качестве бэкэнда для кэширования данных для повышения производительности приложений Spring Boot. В кодовой лаборатории объясняется, как это настроить.
Что вы узнаете
- Как использовать Memorystore в качестве бэкэнда кэша для приложения Spring Boot.
Что вам понадобится
- Проект Google Cloud
- Браузер, например Google Chrome
- Знакомство со стандартными текстовыми редакторами Linux, такими как Vim, Emacs и GNU Nano.
Как вы будете использовать кодовую лабораторию?
Как бы вы оценили свой опыт работы с сервисами Google Cloud?
2. Настройка и требования
Самостоятельная настройка среды
- Войдите в Cloud Console и создайте новый проект или повторно используйте существующий. (Если у вас еще нет учетной записи Gmail или G Suite, вам необходимо ее создать .)
Запомните идентификатор проекта — уникальное имя для всех проектов Google Cloud (имя, указанное выше, уже занято и не подойдет вам, извините!). Позже в этой лаборатории он будет называться PROJECT_ID
.
- Далее вам необходимо включить биллинг в Cloud Console, чтобы использовать ресурсы Google Cloud.
Прохождение этой лаборатории кода не должно стоить много, если вообще стоит. Обязательно следуйте всем инструкциям в разделе «Очистка», в которых рассказывается, как отключить ресурсы, чтобы вам не приходилось нести расходы, выходящие за рамки этого руководства. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .
Активировать Cloud Shell
- В Cloud Console нажмите «Активировать Cloud Shell». .
Если вы никогда раньше не запускали Cloud Shell, вам будет представлен промежуточный экран (ниже сгиба) с описанием того, что это такое. В этом случае нажмите «Продолжить» (и вы больше никогда его не увидите). Вот как выглядит этот одноразовый экран:
Подготовка и подключение к Cloud Shell займет всего несколько минут.
Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Большую часть, если не всю, работу в этой лаборатории кода можно выполнить с помощью простого браузера или Chromebook.
После подключения к Cloud Shell вы увидите, что вы уже прошли аутентификацию и что для проекта уже установлен идентификатор вашего проекта.
- Выполните следующую команду в Cloud Shell, чтобы подтвердить, что вы прошли аутентификацию:
gcloud auth list
Вывод команды
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
Вывод команды
[core] project = <PROJECT_ID>
Если это не так, вы можете установить это с помощью этой команды:
gcloud config set project <PROJECT_ID>
Вывод команды
Updated property [core/project].
3. Настройте экземпляр Memorystore для Redis.
Запустите Cloud Shell.
После запуска Cloud Shell используйте командную строку, чтобы включить API Memorystore и создать новый экземпляр Memorystore.
$ gcloud services enable redis.googleapis.com $ gcloud redis instances create myinstance --size=1 --region=us-central1
После завершения операции ваш экземпляр будет готов к использованию.
Получите IP-адрес хоста Redis экземпляра, выполнив следующую команду. Вы будете использовать его снова позже при настройке приложения Spring Boot.
$ gcloud redis instances describe myinstance --region=us-central1 \ | grep host host: 10.0.0.4
В Google Cloud Console перейдите в «Базы данных» > «Memorystore» > Redis . Ваш экземпляр должен находиться в состоянии «готов»:
4. Настройте экземпляр Compute Engine.
Создайте экземпляр Compute Engine в том же регионе.
$ gcloud compute instances create instance-1 --zone us-central1-c
После завершения операции ваш экземпляр будет готов к использованию.
Подключитесь к своему экземпляру через SSH с помощью следующей команды:
$ gcloud compute ssh instance-1 --zone us-central1-c
Либо перейдите в раздел «Вычисления» > «Compute Engine» > «Экземпляры виртуальных машин» и нажмите «SSH» в столбце «Подключиться» :
В оболочке экземпляра виртуальной машины (ВМ) (не Cloud Shell) установите инструменты OpenJDK, Maven и Redis:
$ sudo apt-get install openjdk-17-jdk-headless maven redis-tools
Дождитесь завершения установки и перейдите к следующему шагу.
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 \ -d type=maven-project \ | tar -xzvf - && cd cache-app
Отредактируйте файл application.properties
, чтобы настроить приложение на использование IP-адреса экземпляра Memorystore для хоста Redis.
$ nano src/main/resources/application.properties
Добавьте следующую строку с IP-адресом вашего Memorystore для Redis (пару шагов назад):
spring.data.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. Запустите приложение и получите доступ к конечной точке.
Убедитесь, что для JAVA_HOME
установлена правильная версия:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
Теперь вы готовы запустить приложение!
$ 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 для Redis с помощью redis-cli:
$ redis-cli -h <memorystore-host-ip-address>
Чтобы просмотреть список ключей кэша, используйте следующую команду:
:6379> KEYS * 1) "hello::bob"
Как видите, имя кэша используется в качестве префикса для ключа, а значение параметра — в качестве второй части.
Чтобы получить значение, используйте команду GET
:
:6379> GET hello::bob Hello bob!
Используйте команду exit
для выхода.
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 !
Узнать больше
- Весеннее кэширование загрузки
- Памятьхранилище
- Spring в репозитории Google Cloud GitHub
- Java в Google Cloud
Лицензия
Эта работа распространяется под лицензией Creative Commons Attribution 2.0 Generic License.