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 .