Перейти к основному содержимому

Введение в Spring Data Redis

· 4 мин. чтения

1. Обзор

Это руководство представляет собой введение в Spring Data Redis , которое предоставляет абстракции платформы Spring Data для Redis — популярного хранилища структур данных в памяти.

Redis управляется структурой данных на основе хранилища ключей для сохранения данных и может использоваться в качестве базы данных, кэша, брокера сообщений и т. д.

Мы сможем использовать общие шаблоны Spring Data (шаблоны и т. д.), сохраняя при этом традиционную простоту всех проектов Spring Data.

2. Зависимости Maven

Начнем с объявления зависимостей Spring Data Redis в pom.xml :

<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>2.3.3.RELEASE</version>
</dependency>

<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.3.0</version>
<type>jar</type>
</dependency>

Последние версии spring-data-redis и jedis можно загрузить с Maven Central.

В качестве альтернативы мы можем использовать стартер Spring Boot для Redis, что устранит необходимость в отдельных зависимостях spring-data и jedis :

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.3.3.RELEASE</version>
</dependency>

Опять же, Maven Central предлагает информацию о последней версии.

3. Конфигурация Redis

Чтобы определить параметры соединения между клиентом приложения и экземпляром сервера Redis, нам нужно использовать клиент Redis.

Для Java доступно несколько клиентских реализаций Redis. В этом руководстве мы будем использовать Jedis — простую и мощную реализацию клиента Redis.

В фреймворке есть хорошая поддержка конфигурации XML и Java. В этом руководстве мы будем использовать конфигурацию на основе Java.

3.1. Конфигурация Java

Начнем с определений компонентов конфигурации:

@Bean
JedisConnectionFactory jedisConnectionFactory() {
return new JedisConnectionFactory();
}

@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(jedisConnectionFactory());
return template;
}

Конфигурация довольно проста.

Во-первых, используя клиент Jedis, мы определяем connectionFactory .

Затем мы определили RedisTemplate с помощью jedisConnectionFactory . Это можно использовать для запроса данных в пользовательском репозитории.

3.2. Пользовательские свойства соединения

Обратите внимание, что в приведенной выше конфигурации отсутствуют обычные свойства, связанные с соединением. Например, в конфигурации отсутствуют адрес сервера и порт. Причина проста: мы используем значения по умолчанию.

Однако, если нам нужно настроить детали подключения, мы всегда можем изменить конфигурацию jedisConnectionFactory :

@Bean
JedisConnectionFactory jedisConnectionFactory() {
JedisConnectionFactory jedisConFactory
= new JedisConnectionFactory();
jedisConFactory.setHostName("localhost");
jedisConFactory.setPort(6379);
return jedisConFactory;
}

4. Репозиторий Redis

Давайте используем сущность Student :

@RedisHash("Student")
public class Student implements Serializable {

public enum Gender {
MALE, FEMALE
}

private String id;
private String name;
private Gender gender;
private int grade;
// ...
}

4.1. Репозиторий данных Spring

Давайте теперь создадим StudentRepository :

@Repository
public interface StudentRepository extends CrudRepository<Student, String> {}

5. Доступ к данным с помощью StudentRepository

Расширяя CrudRepository в StudentRepository , мы автоматически получаем полный набор методов сохраняемости, выполняющих функции CRUD.

5.1. Сохранение нового студенческого объекта

Давайте сохраним новый объект ученика в хранилище данных:

Student student = new Student(
"Eng2015001", "John Doe", Student.Gender.MALE, 1);
studentRepository.save(student);

5.2. Получение существующего студенческого объекта

Мы можем проверить правильность вставки студента в предыдущем разделе, выбрав данные студента:

Student retrievedStudent = 
studentRepository.findById("Eng2015001").get();

5.3. Обновление существующего студенческого объекта

Давайте изменим имя студента, полученное выше, и снова сохраним его:

retrievedStudent.setName("Richard Watson");
studentRepository.save(student);

Наконец, мы можем снова получить данные учащегося и убедиться, что имя обновлено в хранилище данных.

5.4. Удаление существующих данных учащихся

Мы можем удалить вставленные данные ученика:

studentRepository.deleteById(student.getId());

Теперь мы можем найти объект студента и убедиться, что результат равен нулю .

5.5. Найти все данные о студентах

Мы можем вставить несколько студенческих объектов:

Student engStudent = new Student(
"Eng2015001", "John Doe", Student.Gender.MALE, 1);
Student medStudent = new Student(
"Med2015001", "Gareth Houston", Student.Gender.MALE, 2);
studentRepository.save(engStudent);
studentRepository.save(medStudent);

Мы также можем добиться этого, вставив коллекцию. Для этого существует другой метод — saveAll() — который принимает один объект Iterable , содержащий несколько объектов-студентов, которые мы хотим сохранить.

Чтобы найти всех вставленных студентов, мы можем использовать метод findAll() :

List<Student> students = new ArrayList<>();
studentRepository.findAll().forEach(students::add);

Затем мы можем быстро проверить размер списка студентов или проверить его на большую степень детализации, проверив свойства каждого объекта.

6. Заключение

В этой статье мы рассмотрели основы Spring Data Redis.

Исходный код приведенных выше примеров можно найти в проекте GitHub .