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.
Contenidos
¿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.
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.
Redis con Python
A continuación se muestra un ejemplo de código en Python que muestra cómo almacenar y recuperar datos de una base de datos en memoria:
# Importar la librería
import redis
# Crear una conexión al servidor de Redis
r = redis.Redis(host='localhost', port=6379, db=0)
# Establecer un par clave-valor para la base de datos
r.set('mykey', 'myvalue')
# Recuperar el valor asociado a la clave mykey de Redis
value = r.get('mykey')
# Mostrar el resultado
print(value)
En este ejemplo se importa la librería de Redis y se crea una conexión al servidor. Luego se utiliza el método set
de Redis para establecer un par clave-valor en la base de datos en memoria y el método get
para recuperar el valor asociado a la clave mykey
. Finalmente, se imprime el valor recuperado.
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.
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, 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 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
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 a experto. No lo dudes y aprende a usar esta tecnología tan demandada y potente en la actualidad.
Paso 1:
Curso básico para aprender a usar Redis en Español, integrar con aplicaciones, sus estructuras de datos y caché.
Paso 2:
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:
Aprende a usar Redis con Spring Data
El curso se enfoca en la integración de Redis con Spring en Java y con el cliente Jedis.
Preguntas Frecuentes Redis – FAQ
¿Para qué se usa Redis?
Redis es una base de datos distribuida en memoria que ofrece estructuras de datos para realizar consultas muy rápidas y escalables. Puede usarse como una base de datos o sistema de caché en los casos de uso en los que necesitemos tiempos de respuesta bajos en tiempo real.
¿Por qué Redis es muy rápida?
La velocidad de acceso a los datos en Redis es muy rápida, tanto de lectura, como de escritura y se consigue ya que no es necesario realizar la escritura a disco de los datos para considerar una transacción terminada. Esta escritura se realiza en memoria.
¿Puede usarse Redis como base de datos?
Sí, Redis puede usarse como una base de datos, en la que el usuario puede configurar la durabilidad que satisfaga su caso de uso y sus requisitos de velocidad.