header_lecciones_v5

Cómo crear un cliente para Redis DB usando Spring Data Redis

por Juan Felipe Becerra, el 20 de enero de 2020

Spring Data Redis

Spring Redis pertenece a la familia Spring Data. Esta herramienta nos proporciona utilidades para que de forma más sencilla podamos configurar el acceso a la base de datos NoSQL Redis y un template para realizar las operaciones más comunes sobre los datos almacenados.

En esta lección veremos cómo configurar con Maven un proyecto para utilizar la clase RedisTemplate que nos da soporte para utilizar Redis. También crearemos una clase Repository que proporcionará las operaciones más comunes sobre una base de datos Redis.

¿Qué es Redis?

  • Redis es un motor de almacenamiento de datos en formato clave-valor opensource.
  • El modelo de datos en el que se basa es de tipo diccionario o tabla de hashes relacionando una clave con una estructura donde se almacena el valor asociado en diferentes formatos: strings, listas, sets, sorted sets y hashes.
  • Se conoce principalmente porque su almacenamiento es muy rápido debido a que mantiene los datos en memoria pero también se persisten en disco.
  • Puede atender cientos de miles de operaciones por segundo y es escalable.
    Redis soporta replicación maestro-esclavo y permite publicación-subscripción.
  • Tiene una amplia lista de clientes diferentes con el que conectarnos al servidor Redis: C, C#, Java, Node.js, Perl, PHP, Python, Ruby, Scala, etc.

Paso 1: Generar un proyecto base a través de Spring Initializr

Spring Data Redis

 

Paso 2: Importar y empezar a trabajar con el proyecto generado previamente

Spring Data Redis

 

Configuración de dependencias del proyecto

Ahora que conocemos un poquito más Redis, vamos a modificar el proyecto para realizar operaciones sobre los datos. Por favor agregar la siguiente dependencia al archivo pom.xml, la cual nos dará la posibilidad de realizar una configuración con más propiedades de la base de datos Redis.

<dependency> <groupId> redis.clients</groupId> <artifactId> jedis</artifactId> </dependency>

 

Creación la clase de configuración del cliente Redis

Spring Data Redis

package com.pragma.redis.redistest.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisStandaloneConfiguration; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; @Configuration public class JedisConfig { @Bean JedisConnectionFactory jedisConnectionFactory() { RedisStandaloneConfiguration redisStandaloneConfiguration = new
RedisStandaloneConfiguration("127.0.0.1", 6379); return new >JedisConnectionFactory(redisStandaloneConfiguration); } @Bean public RedisTemplate<string, object=""> redisTemplate() { RedisTemplate<string, object> template = new RedisTemplate<>(); template .setConnectionFactory(jedisConnectionFactory()); return template; } }

 

Por defecto JedisConnectionFactory configura una conexión en localhost en el puerto por defecto de Redis 6379. Si tienes otra configuración en Redis debes configurar también tu JedisConnectionFactory.

Crear un modelo User como ejemplo

Por favor crear un modelo de usuario que se pueda serializar para ser almacenado como información en la base de datos Redis.

Spring Data Redis

Como ejemplo para el ejercicio práctico se tiene el siguiente modelo de usuario.

package com.pragma.redis.redistest.model; import java.io.Serializable; public class User implements Serializable { private static final long serialVersionUID = 1L; private String id; private String name; private String lastName; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } }

 

Crear la clase repositorio para acceder a la base de datos Redis

Spring Data Redis

package com.pragma.redis.redistest.repository; import java.util.List; import java.util.Map; import org.springframework.data.redis.core.HashOperations; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Repository; import com.pragma.redis.redistest.model.User; @Repository public class UserRepository { public static final String USER_KEY = "USER"; private HashOperations hashOperations; private RedisTemplate redisTemplate; public UserRepository(RedisTemplate redisTemplate){ this.redisTemplate = redisTemplate; this.hashOperations = this.redisTemplate.opsForHash(); } public void save(User user) { hashOperations.put(USER_KEY, user.getId(), user); } public List findAll(){ return hashOperations.values(USER_KEY); } public User findById(String id) { return (User) hashOperations.get(USER_KEY, id); } public void update(User user) { save(user); } public void delete(String id) { hashOperations.delete(USER_KEY, id); } }

 

Crear la clase controlador para exponer servicios

Se debe crear una clase controlador para exponer los servicios Restful que realicen el CRUD correspondiente en la base de datos Redis.

package com.pragma.redis.redistest.api; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.pragma.redis.redistest.model.User; import com.pragma.redis.redistest.repository.UserRepository; @RestController @CrossOrigin @RequestMapping("/users") public class ApiUserController { @Autowired private UserRepository userRepository; @PostMapping public User save(@RequestBody User user){ userRepository.save(user); return user; } @GetMapping public List list(){ return userRepository.findAll(); } @GetMapping("/{id}") public User getUser(@PathVariable String id){ return userRepository.findById(id); } @PutMapping public User update(@RequestBody User user){ userRepository.update(user); return user; } @DeleteMapping("/{id}") public String deleteUser(@PathVariable String id){ userRepository.delete(id); return id; } }

 

Prueba los servicios una vez hayas ejecutado la aplicación

Spring Data Redis

 

Nuevo llamado a la acción

Temas:Desarrollo de Software

Lecciones Pragma

Lecciones en Academia Pragma

Aquí encontrarás tutoriales técnicos para que apliques en temas de desarrollo de software, cloud, calidad en software y aplicaciones móviles. 

También puedes visitar nuestro Blog con contenido actual sobre Transformación Digital, Marketing, Conocimiento de Usuario y más. 

Blog

Suscríbete a la academia

Descarga la Guía para trabajar con ambientes IBM Websphere Portal