3. Redis#

Redis es un sistema de almacenamiento en memoria (in-memory database) basado en estructuras de datos llave-valor (key-value store).

Originalmente fue diseñado como un sistema extremadamente rápido para guardar y recuperar información en memoria RAM. Debido a su velocidad y simplicidad, Redis se utiliza ampliamente como:

  • Caché (cache)

  • Base de datos temporal

  • Sistema de sesiones

  • Broker de mensajes

  • Cola de tareas (message queue)

  • Sistema Pub/Sub

  • Almacenamiento distribuido

Redis almacena los datos principalmente en memoria RAM, por lo que las operaciones suelen ejecutarse en microsegundos o milisegundos.

Aunque Redis trabaja en memoria, también puede persistir los datos a disco.

3.1. Características principales#

  • Muy rápido

  • Arquitectura cliente-servidor

  • Basado en TCP/IP

  • Maneja múltiples tipos de datos

  • Ligero y fácil de instalar

  • Ideal para aplicaciones distribuidas

Redis utiliza un modelo de datos tipo:

llave -> valor

Por ejemplo:

usuario:100 -> "Mario"
contador -> 15

3.2. Instalación con Docker#

Podemos ejecutar Redis fácilmente utilizando Docker:

docker run --name redis-server -p 6379:6379 redis

Esto descarga la imagen oficial de Redis desde Docker Hub y ejecuta un contenedor exponiendo el puerto 6379.

Para verificar que el contenedor está ejecutándose:

docker ps

3.3. Conectarse al cliente Redis#

Podemos abrir una terminal dentro del contenedor:

docker exec -it redis-server redis-cli

Esto abre el cliente interactivo de Redis:

127.0.0.1:6379>

3.4. Comandos básicos llave-valor#

Guardar un valor#

SET nombre "Mario"

Obtener un valor#

GET nombre

Resultado:

"Mario"

Eliminar una llave#

DEL nombre

Verificar si existe una llave#

EXISTS nombre

Incrementar un contador#

Redis puede utilizarse fácilmente para contadores:

SET visitas 0
INCR visitas
INCR visitas

Resultado:

2

Tiempo de expiración#

Las llaves pueden expirar automáticamente:

SET token "abc123"
EXPIRE token 60

La llave será eliminada después de 60 segundos.

También puede hacerse en una sola operación:

SETEX token 60 "abc123"

3.5. Listas y colas (Queues)#

Redis incluye estructuras tipo lista muy útiles para implementar colas de mensajes (message queues).

Una lista en Redis puede utilizarse como:

  • Cola FIFO

  • Cola de tareas

  • Sistema productor-consumidor

  • Buffer de mensajes

Agregar elementos al final de una lista#

RPUSH tareas "procesar imagen"
RPUSH tareas "enviar correo"
RPUSH tareas "generar reporte"

Ver elementos#

LRANGE tareas 0 -1

Resultado:

1) "procesar imagen"
2) "enviar correo"
3) "generar reporte"

Consumir mensajes de la cola#

LPOP tareas

Resultado:

"procesar imagen"

La lista ahora contiene:

1) "enviar correo"
2) "generar reporte"

Esto implementa naturalmente una cola FIFO.

Blocking Queue#

Redis permite esperar mensajes de manera bloqueante.

Esto es muy útil para sistemas distribuidos y workers.

Consumidor:

BLPOP tareas 0

El 0 significa esperar indefinidamente hasta que llegue un mensaje.

Productor:

RPUSH tareas "nuevo trabajo"

En cuanto aparece un mensaje, el consumidor lo recibe inmediatamente.

3.6. Arquitectura Producer-Consumer#

Redis es muy utilizado para implementar el patrón productor-consumidor.

Producer ---> Redis Queue ---> Worker/Consumer

Por ejemplo:

  • Un servidor web recibe peticiones

  • Las agrega a Redis

  • Workers independientes procesan las tareas

Esto desacopla los componentes y mejora la escalabilidad.

Ejemplo típico:

  • Generación de PDFs

  • Envío de correos

  • Procesamiento de imágenes

  • Inferencia de modelos de IA

  • Procesamiento distribuido

3.7. Persistencia#

Aunque Redis trabaja principalmente en memoria RAM, puede guardar datos en disco utilizando:

  • Snapshots (RDB)

  • Append Only File (AOF)

Esto permite recuperar información después de reiniciar el servidor.

3.8. Redis como Message Queue#

Redis es una excelente opción para colas ligeras y rápidas.

Ventajas:

  • Muy rápido

  • Fácil de usar

  • Baja latencia

  • Ideal para sistemas pequeños y medianos

Limitaciones:

  • No reemplaza completamente sistemas especializados como RabbitMQ o Kafka

  • Los mensajes pueden perderse dependiendo de la configuración

  • Menos garantías de entrega

Sin embargo, para muchos sistemas web y proyectos académicos, Redis es una solución extremadamente práctica y eficiente.