Introducción a Spring Data Redis

Descripción general

Este artículo es una introducción a Spring Data Redis, que proporciona las abstracciones de Spring Data platform a Redis, el popular almacén de estructura de datos en memoria.

Redis está impulsado por una estructura de datos basada en el almacén de claves para conservar los datos y se puede usar como base de datos, caché, agente de mensajes, etc.

Podremos utilizar los patrones comunes de Datos de primavera(plantillas, etc.), mientras que también tiene la simplicidad tradicional de todos los proyectos de datos de Primavera.

Dependencias Maven

Comencemos declarando las dependencias de Redis de datos de primavera en el 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>

Las últimas versiones de spring-data-redis y jedis se pueden descargar desde Maven Central.

Alternativamente, podemos usar el arrancador de arranque de resorte para Redis, lo que eliminará la necesidad de dependencias separadas de datos de resorte y jedis:

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

Una vez más, Maven central ofrece la información de la versión más reciente.

La configuración de Redis

Para definir la configuración de conexión entre el cliente de la aplicación y la instancia del servidor Redis, necesitamos usar un cliente Redis.

Hay varias implementaciones de cliente Redis disponibles para Java. En este tutorial, usaremos Jedis, una implementación de cliente de Redis sencilla y potente.

Hay un buen soporte para la configuración XML y Java en el marco; para este tutorial, usaremos la configuración basada en Java.

3.1. Configuración Java

Comencemos con las definiciones de configuración de bean:

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

La configuración es bastante simple. Primero, usando el cliente Jedis, estamos definiendo una fábrica de conexiones.

A continuación, definimos una RedisTemplate utilizando jedisConnectionFactory. Esto se puede usar para consultar datos con un repositorio personalizado.

3.2. Propiedades de conexión personalizadas

Es posible que ya haya notado que las propiedades habituales relacionadas con la conexión faltan en la configuración anterior. Por ejemplo, la dirección y el puerto del servidor faltan en la configuración. La razón es simple: para nuestro ejemplo, estamos usando los valores predeterminados.

Sin embargo, si necesitamos configurar los detalles de conexión, siempre podemos modificar la configuración de jedisConnectionFactory de la siguiente manera:

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

Repositorio Redis

Usemos una entidad de estudiante para nuestros ejemplos:

@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. El Repositorio de datos de Primavera

Ahora vamos a crear el StudentRepository de la siguiente manera:

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

Acceso a datos Mediante StudentRepository

Al extender CrudRepository en StudentRepository, obtenemos automáticamente un conjunto completo de métodos de persistencia que realizan la funcionalidad CRUD.

5.1. Guardar un nuevo objeto de estudiante

Guardemos un nuevo objeto de estudiante en el almacén de datos:

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

5.2. Recuperación de un Objeto de estudiante existente

Podemos verificar la inserción correcta del estudiante en la sección anterior obteniendo los datos del estudiante:

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

5.3. Actualización de un Objeto de estudiante existente

Cambiemos el nombre del estudiante recuperado anteriormente y guárdelo de nuevo:

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

Finalmente, podemos recuperar los datos del estudiante de nuevo y verificar que el nombre esté actualizado en el almacén de datos.

5.4. Eliminación de Datos de estudiantes existentes

Podemos eliminar los datos de estudiantes insertados anteriormente:

studentRepository.deleteById(student.getId());

Ahora podemos buscar el objeto de estudiante y verificar que el resultado es nulo.

5.5. Buscar Todos los Datos de los estudiantes

Podemos insertar algunos objetos de los estudiantes:

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);

También podemos lograr esto insertando una colección. Para eso, hay un método diferente, saveAll (), que acepta un único objeto iterable que contiene varios objetos de estudiante que queremos persistir.

Para encontrar a todos los estudiantes insertados, podemos usar el método findAll() :

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

Luego podemos comprobar rápidamente el tamaño de la lista de estudiantes o verificar una mayor granularidad comprobando las propiedades de cada objeto.

Conclusión



+