Soporte de Redis con Spring: RedisTemplate

0
7511

Soporte Redis con Spring: RedisTemplate

0. Índice de contenidos.


1. Introducción.

Spring Redis pertenece a la familia Spring Data. 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 este tutorial veremos cómo instalar Redis en Mac OS y cómo configurar con Maven un proyecto para utilizar la clase RedisTemplate que nos da soporte para utilizar Redis. También crearemos un clase Repository que proporcionará las operaciones más comunes sobre una base de datos Redis.

2. Entorno.

El tutorial se ha realizado con el siguiente entorno:

  • MacBook Pro 15′ (2.4 GHz Intel Core i5, 8GB DDR3 SDRAM).
  • Sistema Operativo: Mac OS Mavericks 10.9.5
  • Oracle Java SDK 1.7.0_60
  • Redis 2.8.11

3. Instalar Redis

Este tutorial está escrito con un MacBook con el sistema operativo Mac OS Mavericks por lo que si dispones de un Mac lo más fácil es utilizar el gestor de paquetes brew. Si no siempre puedes descargarlo de la web oficial. El comando para instalar Redis desde Mac es el siguiente:

Si todo ha ido bien ejecuta por consola la instrucción redis-server y se arrancará Redis.

Una vez arrancado el servidor desde otra consola podemos arrancar el cliente con redis-cli con el que poder lanzar nuestros comandos Redis, pero antes vamos a explicar un poco en qué consiste esta base de datos.

4. Pero 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.

5. Configurar pom.xml

Ahora que conocemos un poquito más Redis, vamos a crear nuestro primero proyecto para realizar operaciones sobre los datos. Crearemos para empezar el pom.xml del proyecto Maven ayudados por spring-boot-starter-redis

El pom.xml quedaría así:

6. Configurar RedisTemplate

Spring Data nos da soporte para abstraernos del driver de conexión a Redis. A través de RedisTemplate nos proporciona una capa de alto nivel para tratar con las operaciones de lectura, escritura, búsqueda, actualización, borrado, etc. Por debajo se puede utilizar cualquier otra librería para trabajar con Redis ya que soporta las librerías Jedis, JRedis, Lettuce y SRP.

Vamos a crear una clase de configuración de nuestra aplicación donde levantar los beans JedisConnectionFactory encargado de ofrecernos una conexión a Redis, la clase RedisTemplate y nuestra clase Repository.

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

Nuestro Repository será el encargado de encapsularnos las operaciones sobre Redis que efectúen operaciones de almacenamiento de tipo cadena. Algunas de las operaciones más utilizadas son:

  • add: Añade una cadena asociada a una clave.
  • getBy: Recupera una cadena por su clave.
  • getKeys: Recupera las claves que cumplen determinado patrón.
  • getAllValuesBy: A partir de un patrón devuelve todas los valores cuya clave lo cumplen.
  • delete: Elimina una cadena por su clave.

Estas son unas pocas operaciones de las decenas de ellas que se pueden realizar si fueran necesarias pero para una pequeña prueba de concepto son suficientes.

Ya tenemos la aplicación montada, sólo nos quedan datos para meter en Redis. Para mostrar la velocidad de esta base de datos vamos a sacar datos de Twitter. Nos conectaremos con nuestras credenciales de Twitter y usaremos Twitter4j para descargar datos sobre un tema, por ejemplo vamos a buscar los tweets que contengan el hashtag #ebola y los vamos a insertar en Redis. La clave del registro a insertar será el identificador de tweet y su contenido asociado será el JSON completo del tweet.

Para arrancar la aplicación lo hacemos con mvn spring-boot:run. Pasados unos segundos nos estarán llegando tweets y quedarán almacenados en Redis. Podemos verlos conectando con redis-cli. Para ver el contenido de todas las claves almacenadas se utiliza el comando keys *. Si queremos ver el contenido de una clave en concreto: get ‘la_clave’:

Si queremos recuperar los tweets de Redis nos podemos crear una clase que a trav&eactue; de nuestro StringRedisRepository podamos pedirle los tweets a partir del patrón común que hemos utilizado (tweet_) llamando al método getAllValuesBy:

7. Referencias

8. Conclusiones.

Hemos pasado muy por encima sobre Redis pero cabe destacar su enorme potencial como almacén de datos por su simplifidad, facilidad de uso y versatilidad.

Cada vez hay más librerías que nos dan soporte y una forma de conectar y usar Redis que aún lo hacen más sencillo. Spring Data Redis es una buena muestra de ello por lo que seguro será una buena elección para tus aplicaciones Java si quieres almacenar y consumir datos en Redis.

Espero que te haya sido de ayuda.

Un saludo.

Juan

Dejar respuesta

Please enter your comment!
Please enter your name here