Introducción a Redis: Base de datos en Memoria

Última actualización: 10/10/2021

En esta entrada vas a aprender qué es Redis. Esta base de datos NoSQL es muy usada para implementar cachés muy rápidas y almacenar datos en la forma clave-valor. No te pierdas la introducción y sigue leyendo para descubrir sus principales características.

Qué es Redis

¿Qué es Redis?

Redis es una base de datos NoSQL de tipo clave-valor distribuida en memoria. La durabilidad de los datos es opcional y soporta varias estructuras de datos y transacciones.

Su nombre viene de REmote DIctionary Server, creado en 2009. El proyecto es open source y está escrito en el lenguaje de programación C.

Sus casos de uso más comunes son como base de datos, sistema de caché y broker de mensajería.

Ventajas de Redis

La principal ventaja de Redis es su velocidad de acceso, tanto de lectura, como de escritura. Esta velocidad superior a otras bases de datos se consigue, ya que no es necesario realizar la escritura a disco de los datos para considerar la transacción terminada. A cada dato, asigna una clave, y puede almacenar tipos de datos abstractos como tablas hash, cadenas de texto o JSON.

nombre="oscar"
tags=["bigdata","cloudcomputing"]

También, soporta la extensión de estas estructuras de datos a través de los Redis Modules. Estos módulos soportan el almacenamiento de documentos, series de datos temporales o su uso como motor de búsqueda, entre otros.

Los datos se almacenan en estructuras en memoria, pero también es posible escribirlos en el disco para asegurar su durabilidad. La persistencia en Redis se puede conseguir de dos maneras: mediante snapshots periódicos de los datos, que se escriben en el disco de forma asíncrona; o mediante journaling, que consiste en escribir un registro de operaciones en un fichero a medida que se van produciendo.

En el caso de un fallo general de todo el sistema, Redis solo perdería por tanto un pequeño periodo de datos. También, se puede forzar a escribir un snapshot manualmente con el comando SAVE.

Además tiene clientes en la mayoría de lenguajes de programación modernos, como C++, Go, Java, Python, R, Scala o JavaScript.

Arquitectura

La arquitectura de Redis es de tipo cliente-servidor. El cliente y el servidor pueden encontrarse en el mismo nodo o bien estar distribuidos. El servidor se encarga de almacenar datos en memoria.

El cliente puede tratarse de la Redis CLI: su herramienta de consola, o bien una API para cualquier lenguaje de programación soportado.

Arquitectura de Redis
Esquema de arquitectura de Redis

La replicación en Redis es de tipo maestro-esclavo. Cada servidor puede tener varias réplicas, que además de lecturas, también pueden configurarse para aceptar escrituras. Además, puede desplegarse en contenedores usando Docker o Kubernetes.

Redis y Locks

Redis se puede usar para implementar locks distribuidos, pero no está pensado para una alta consistencia. Usa el algoritmo Redlock, que no implementa fencing token.

Podemos necesitar locks distribuidos por dos motivos:

  • Eficiencia: Evitar hacer la misma tarea varias veces.
  • Consistencia: Evitar corromper datos cuando dos aplicaciones escriben concurrentemente.

Los locks distribuidos implementan mecanismos para liberar el lock cuando pasa un tiempo (para evitar que una aplicación cause un deadlock si falla). El problema es que si la aplicación no falla, pero está en pausa mucho tiempo (por ejemplo por el recolector de basura de Java – GC), puede liberar el lock cuando no ha terminado de operar.

La solución es que el lock tenga un fencing token, que se incremente por cada proceso que adquiera el lock, si un proceso antiguo que sufrió una pausa se reanuda, tendrá un token antiguo (no el último) y la operación será rechazada.

Alternativas

Además de las implementaciones que los proveedores cloud hacen de Redis, como Azure Cache for Redis en Azure o ElastiCache en AWS, también existen otros proyectos similares que veremos a continuación.

Redis vs Memcached

Ambas tecnologías NoSQL son open source y permiten implementar caché en el servidor mediante almacenamiento de datos de tipo clave-valor. Están desarrolladas en el lenguaje de programación C.

memcached logo
Memcached

Tienen una latencia muy baja (por debajo de los milisegundos) y proporcionan particionamiento en los datos. En cuanto a los tipos de datos, Redis soporta un abanico más amplio (sets, listas o hashes) que Memcached, que solamente soporta estructuras de tipo clave-valor. Por otro lado, Redis también permite modificar partes de un objeto sin cargarlo completamente en el nivel de aplicación.

En cuanto a la persistencia de datos, Memcached no la soporta y es puramente en memoria. Como hemos visto, Redis permite almacenar los datos en el disco mediante dos mecanismos: snapshots y journaling. Debemos tener en cuenta que Memcached tiene un límite de tamaño por cada dato almacenado menor. Memcached tampoco soporta replicación de datos, mientras que Redis lo soporta mediante clustering con la estrategia maestro-esclavo.

Las políticas de desalojo de datos de memoria en Memcached son más limitadas, usando LRU (Least Recently Used). Redis soporta múltiples políticas para ajustar el funcionamiento al caso de uso, como LRU, LFU, etc. Además, también soporta transacciones.

En conclusión, Redis es una tecnología adecuada para proyectos en los que gestionar cachés con grandes cantidades de datos, debido a sus capacidades de clústering y flexibilidad en los tipos de datos y mecanismos de desalojo. Además de este caso de uso, también permite implementar colas de mensajería y persistencia de los datos.

Por otro lado, Memcached es una base de datos mucho más simple, que puede conseguir escalabilidad horizontal simplemente añadiendo más nodos. Sin embargo, esta estrategia depende de una buena gestión del particionado de los datos.

Podemos ver Redis como una implementación más compleja de Memcached, con operaciones que pueden trabajar con estructuras de datos más complejas.

Redis vs MongoDB

mongodb logo
MongoDB

MongoDB es una base de datos NoSQL distribuida para almacenar documentos sin esquema. Ambas son bases de datos, pero están desarrolladas para casos de uso diferentes. Aún así, es posible combinarlas, usando Redis como caché de MongoDB.

De esta forma, podemos gestionar las actualizaciones y lecturas de documentos en memoria para reducir la carga sobre MongoDB y usar esta base de datos como sistema de almacenamiento principal.

Redis vs RabbitMQ

RabbitMQ Logo
RabbitMQ

Aunque Redis ha sido diseñada como una base de datos, también puede usarse como un broker de mensajería. RabbitMQ es un broker de mensajería más potente al estar diseñado para esta función. También, RabbitMQ nos proporciona algunas ventajas, como la durabilidad de los mensajes, la garantía de entrega, el enrutado de mensajes y la capacidad de cada uno de los mensajes.

Deberás elegir Redis cuando la persistencia y la retención de mensajes no sea tan importante. Por otro lado, RabbitMQ es mejor solución para enrutar mensajes y escalar el sistema.

Formación y Siguientes Pasos

A continuación puedes acceder a tres cursos para transformarte de iniciado en Redis a experto. No lo dudes y aprende a usar esta tecnología tan demandada y potente en la actualidad.

Paso 1:

Curso aprende Redis 5 desde Cero

Aprende Redis desde Cero

Curso básico para aprender a usar Redis en Español, integrar con aplicaciones, sus estructuras de datos y caché.

Paso 2:

Curso de Redis - De principiante a Avanzado

Redis – De principiante a Avanzado

Este curso profundiza un poco más en Redis avanzado con más de 6 horas de vídeo. Aprenderás a integrarlo con Python y desplegar sistemas en producción.

Paso 3:

Curso Aprende Redis y a usar Jedis con Spring Data

Aprende a usar Jedis con Spring Data

El curso se enfoca en la integración de Redis con Spring en Java y con el cliente Jedis.

Deja una respuesta