1. Обзор
Одной из главных достопримечательностей Spring Boot является то, что сторонняя конфигурация часто сводится к нескольким свойствам.
В этом руководстве мы увидим, как Spring Boot упрощает работу с Redis.
2. Почему Redis?
Redis — одно из самых популярных хранилищ структур данных в памяти. По этой причине его можно использовать в качестве базы данных, кэша и брокера сообщений.
С точки зрения производительности, он хорошо известен благодаря быстрому времени отклика . В результате он может обслуживать сотни тысяч операций в секунду и легко масштабируется.
И он хорошо сочетается с приложениями Spring Boot . Например, мы можем использовать его в качестве кеша в нашей архитектуре микросервисов. Мы также можем использовать его в качестве базы данных NoSQL.
3. Запуск Redis
Для начала давайте создадим экземпляр Redis, используя их официальный образ Docker .
$ docker run -p 16379:6379 -d redis:6.0 redis-server --requirepass "mypass"
Выше мы только что запустили экземпляр Redis на порту 16379
с паролем mypass
.
4. Стартер
Spring предоставляет нам отличную поддержку для подключения наших приложений Spring Boot к Redis с помощью Spring Data Redis .
Итак, далее давайте удостоверимся, что у нас есть зависимость spring-boot-starter-data-redis
в нашем pom.xml
:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
5. Салат
Далее настроим клиент.
Клиент Java Redis, который мы будем использовать, — это Lettuce , поскольку Spring Boot использует его по умолчанию. Однако мы могли бы также использовать Jedis .
В любом случае результатом будет экземпляр RedisTemplate
:
@Bean
public RedisTemplate<Long, Book> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<Long, Book> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
// Add some specific configuration here. Key serializers, etc.
return template;
}
6. Свойства
Когда мы используем Lettuce, нам не нужно настраивать RedisConnectionFactory.
Spring Boot делает это за нас.
Все, что нам осталось, это указать несколько свойств в нашем файле application.properties :
spring.redis.database=0
spring.redis.host=localhost
spring.redis.port=16379
spring.redis.password=mypass
spring.redis.timeout=60000
Соответственно:
база данных
устанавливает индекс базы данных, используемый фабрикой соединенийhost
- это место, где находится хост серверапорт
указывает порт, где сервер прослушиваетpassword
— это пароль для входа на сервер, атайм- аут
устанавливает тайм-аут соединения
Конечно, есть много других свойств, которые мы можем настроить. Полный список свойств конфигурации доступен в документации Spring Boot.
7. Демо
Наконец, давайте попробуем использовать его в нашем приложении. Если мы представим себе класс Book и
BookRepository,
мы сможем создавать и извлекать Book
, используя наш RedisTemplate
для взаимодействия с Redis в качестве нашего бэкенда:
@Autowired
private RedisTemplate<Long, Book> redisTemplate;
public void save(Book book) {
redisTemplate.opsForValue().set(book.getId(), book);
}
public Book findById(Long id) {
return redisTemplate.opsForValue().get(id);
}
По умолчанию Lettuce будет управлять сериализацией и десериализацией вместо нас, так что на данный момент нам больше нечего делать. Однако хорошо знать, что это также можно настроить.
Еще одна важная особенность заключается в том, что RedisTemplate является потокобезопасным , поэтому он будет правильно работать в многопоточных средах .
8. Заключение
В этой статье мы настроили Spring Boot для общения с Redis через Lettuce. И мы достигли этого с помощью стартера, одной конфигурации @Bean
и нескольких свойств.
В завершение мы использовали RedisTemplate
, чтобы Redis выступал в качестве простого бэкенда.
Полный пример можно найти на GitHub .