Введение в Spring Data Redis
1. обзор
Это статьяan introduction to Spring Data Redis, которая предоставляет абстракции платформы Spring Data дляRedis - популярного хранилища структур данных в памяти.
Redis управляется структурой данных на основе хранилища ключей для сохранения данных и может использоваться в качестве базы данных, кэша, посредника сообщений и т. Д.
Мы сможем использовать общие шаблоны Spring Data (шаблоны и т. Д.), Сохраняя при этом традиционную простоту всех проектов Spring Data.
2. Maven Зависимости
Начнем с объявления зависимостей Spring Data Redis вpom.xml:
org.springframework.data
spring-data-redis
2.0.3.RELEASE
redis.clients
jedis
2.9.0
jar
Последние версииspring-data-redis иjedis можно загрузить с Maven Central.
3. Конфигурация Redis
Чтобы определить параметры соединения между клиентом приложения и экземпляром сервера Redis, нам нужно использовать клиент Redis.
Существует ряд реализаций клиента Redis для Java. В этом руководствеwe’ll use Jedis – a simple and powerful Redis client implementation.
В фреймворке есть хорошая поддержка конфигурации как XML, так и Java; в этом руководстве мы будем использовать конфигурацию на основе Java.
3.1. Конфигурация Java
Начнем с определений компонентов конфигурации:
@Bean
JedisConnectionFactory jedisConnectionFactory() {
return new JedisConnectionFactory();
}
@Bean
public RedisTemplate redisTemplate() {
RedisTemplate 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 {}
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());
Теперь мы можем найти объект ученика и убедиться, что результатnull.
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 students = new ArrayList<>();
studentRepository.findAll().forEach(students::add);
Затем мы можем быстро проверить размер спискаstudents или убедиться в большей степени детализации, проверив свойства каждого объекта.
6. Заключение
В этом уроке мы рассмотрели основы Spring Data Redis. Исходный код приведенных выше примеров можно найти вa GitHub project.