1 / 15
← Inicio

⚡ Redis

La base de datos más rápida del mundo

Redis = Remote Dictionary Server

Una base de datos en memoria que funciona como caché, cola de mensajes, broker de pub/sub, y mucho más. Es increíblemente rápida porque todo vive en RAM.

Ultra Rápida
Microsegundos de latencia
🧠
En Memoria
Todo en RAM = velocidad
📊
Estructuras
Strings, Lists, Sets, Hashes...
🔄
Persistencia
Puede guardar en disco

📊 Estructuras de Datos en Redis

No es solo key-value

📝 Strings
SET user:1:name "Juan"
GET user:1:name → "Juan"

El más básico. Guarda texto, números, JSON...

📋 Lists
LPUSH queue "task1"
LPUSH queue "task2"
RPOP queue → "task1"

Lista ordenada. Perfecta para colas.

🎯 Sets
SADD tags "n8n" "redis"
SMEMBERS tags → ["n8n","redis"]

Colección sin duplicados.

🗂️ Hashes
HSET user:1 name "Juan"
HSET user:1 email "j@e.com"
HGETALL user:1

Como un objeto/diccionario.

📈 Sorted Sets
ZADD leaderboard 100 "user1"
ZADD leaderboard 200 "user2"
ZRANGE leaderboard 0 -1

Set ordenado por puntuación.

💾 Redis como Caché

Acelera tus aplicaciones 100x

Un caché guarda resultados de operaciones costosas para no repetirlas. Redis es perfecto para esto.

📱
Request
🔴
Redis
¿Está en caché?
✅ HIT
Responde
❌ MISS
→ DB → Guarda
Patrón Cache-Aside en n8n
1. Redis GET "api:users:123"
2. IF existe → Devolver resultado
3. IF no existe:
   - HTTP Request a API
   - Redis SET "api:users:123" resultado EX 3600
   - Devolver resultado
📊 Comparación de tiempos
Sin caché: API externa → 200-500ms por request
Con Redis: Caché hit → 1-5ms por request
Mejora: ~100x más rápido

⏰ TTL y Expiración

Los datos que se autodestruyen

TTL = Time To Live. Redis puede eliminar datos automáticamente después de un tiempo. Perfecto para caché, sesiones, tokens temporales.

NUEVO
EXPIRADO
Comandos de TTL
// Guardar con expiración de 1 hora (3600 segundos)
SET session:abc123 "user_data" EX 3600

// O usar EXPIRE después
SET mykey "value"
EXPIRE mykey 3600

// Ver cuánto tiempo le queda
TTL mykey → 3542 (segundos restantes)

// Eliminar expiración (hacer permanente)
PERSIST mykey
💡 Casos de uso con TTL
Caché de API: TTL 1 hora (datos cambian poco)
Sesiones de usuario: TTL 24 horas
Tokens de verificación: TTL 15 minutos
Rate limiting: TTL 60 segundos (ventana de 1 min)

✅ Pro Tips de TTL:

• Siempre pon TTL en datos de caché para evitar datos stale
• Usa TTL cortos para datos sensibles (tokens, OTPs)
• Redis elimina keys expiradas de forma "lazy" + periódica

📬 Redis como Cola de Mensajes

FIFO simple y efectivo

Las listas de Redis funcionan como colas perfectas. LPUSH para agregar, RPOP para sacar. First In, First Out.

📥 LPUSH
Agregar tarea
T5
T4
T3
T2
T1
📤 RPOP
Procesar tarea
Comandos de Cola
// Productor: agregar tareas
LPUSH tasks '{"type":"email","to":"user@example.com"}'
LPUSH tasks '{"type":"sms","to":"+123456789"}'

// Consumidor: sacar y procesar
RPOP tasks → '{"type":"email","to":"user@example.com"}'

// Ver cuántas tareas hay pendientes
LLEN tasks → 1

// Bloquear hasta que haya tarea (mejor para workers)
BRPOP tasks 30 → espera hasta 30 segundos
🔧 En n8n: Cola con Redis
Flujo Productor: Webhook → Redis LPUSH "tasks"
Flujo Consumidor: Schedule (5s) → Redis RPOP → IF hay tarea → Procesar

🚦 Rate Limiting con Redis

Controla el flujo de requests

Rate limiting limita cuántas veces se puede hacer algo en un período de tiempo. Redis es perfecto porque es atómico y rápido.

Requests (5/min):
?
Algoritmo Fixed Window
// Key: rate:user_id:minuto_actual
key = "rate:user123:202401211530"

// Incrementar contador
count = INCR key

// Si es el primer request, poner TTL de 60 segundos
IF count == 1:
    EXPIRE key 60

// Verificar límite
IF count > 5:
    return "Rate limit exceeded"
ELSE:
    return "OK, procesar request"
🔧 Implementación en n8n
Flujo de Rate Limiting
1. Webhook recibe request
2. Code Node: genera key "rate:{{ip}}:{{minuto}}"
3. Redis INCR key
4. Redis EXPIRE key 60 (si count = 1)
5. IF count > 100 → Responder 429 Too Many Requests
6. ELSE → Continuar flujo normal

💡 Usos de Rate Limiting:

• Proteger APIs de abuso
• Limitar logins fallidos (seguridad)
• Controlar envío de emails (evitar spam)
• Throttling de webhooks entrantes

👤 Sesiones con Redis

Estado de usuario distribuido

Las sesiones guardan información del usuario entre requests. Redis es ideal porque es rápido y permite sesiones compartidas entre servidores.

🔑 Flujo de Sesión
1
Usuario hace login → Generar session_id único
2
Redis HSET session:abc123 user_id 1 role "admin" EX 86400
3
Devolver session_id al cliente (cookie/header)
4
Siguiente request → Redis HGETALL session:abc123
5
Verificar datos y procesar request autenticado
Comandos de Sesión
// Crear sesión
HSET session:abc123 user_id "1" name "Juan" role "admin"
EXPIRE session:abc123 86400  // 24 horas

// Leer sesión
HGETALL session:abc123
→ {"user_id": "1", "name": "Juan", "role": "admin"}

// Actualizar sesión (extender TTL en cada request)
EXPIRE session:abc123 86400

// Cerrar sesión (logout)
DEL session:abc123
✅ Ventajas sobre sesiones en memoria
Escalable: Múltiples servidores comparten sesiones
Persistente: Sobrevive reinicios del servidor
Rápido: Microsegundos de latencia

📡 Pub/Sub con Redis

Mensajería en tiempo real

Pub/Sub = Publish/Subscribe. Un patrón donde los publicadores envían mensajes a canales y los suscriptores los reciben en tiempo real.

📤 Publisher
PUBLISH channel mensaje
📺 Canal: "notifications"
👤 Subscriber 1
👤 Subscriber 2
👤 Subscriber 3
Comandos Pub/Sub
// Suscriptor (en una conexión)
SUBSCRIBE notifications
// Espera mensajes...

// Publicador (en otra conexión)
PUBLISH notifications '{"type":"alert","message":"Nuevo pedido!"}'
// → El suscriptor recibe el mensaje instantáneamente

// Suscribirse a múltiples canales
PSUBSCRIBE notifications:*
// Recibe de notifications:email, notifications:sms, etc.
💡 Casos de uso de Pub/Sub
Chat en tiempo real: Mensajes entre usuarios
Notificaciones: Alertas a múltiples servicios
Sincronización: Invalidar caché en varios servidores
Eventos: Notificar cuando cambia un recurso

⚠️ Limitación de Pub/Sub:

Los mensajes NO se guardan. Si un suscriptor está desconectado, pierde los mensajes. Para garantía de entrega, usa Redis Streams o colas.

🌊 Redis Streams

Pub/Sub con persistencia

Streams son como Pub/Sub pero los mensajes se guardan. Puedes leer el historial, tener grupos de consumidores, y garantizar entrega.

Comandos de Streams
// Agregar mensaje al stream
XADD mystream * user "Juan" action "login"
→ "1234567890-0" (ID único generado)

// Leer últimos mensajes
XREAD COUNT 10 STREAMS mystream 0
// Devuelve los últimos 10 mensajes

// Leer solo mensajes nuevos (blocking)
XREAD BLOCK 5000 STREAMS mystream $
// Espera hasta 5 segundos por nuevos mensajes

// Consumer Groups (procesamiento distribuido)
XGROUP CREATE mystream mygroup $ MKSTREAM
XREADGROUP GROUP mygroup consumer1 COUNT 1 STREAMS mystream >
📊 Streams vs Pub/Sub vs Listas
Característica Pub/Sub Lists Streams
Persistencia
Múltiples consumidores
Consumer Groups
Historial

✅ Cuándo usar Streams:

• Event sourcing y logs de eventos
• Procesamiento distribuido con múltiples workers
• Cuando necesitas garantía de entrega
• Cuando necesitas poder "rebobinar" y reprocesar

🔧 Redis en n8n

Configuración y uso del nodo

🔴 Redis Node en n8n

n8n tiene un nodo nativo para Redis con las operaciones más comunes.

GET
Obtener valor de una key
SET
Guardar valor en una key
DELETE
Eliminar una key
INCR
Incrementar contador
KEYS
Buscar keys por patrón
PUSH
Agregar a lista
POP
Sacar de lista
PUBLISH
Pub/Sub publish
Configurar credenciales de Redis en n8n
Host: localhost (o tu servidor Redis)
Port: 6379
Password: (si tiene)
Database: 0 (default)

// Si usas Redis en la nube:
Host: redis-12345.cloud.redislabs.com
Port: 12345
Password: tu_password_secreto
SSL: true

💡 Pro Tip: Para comandos avanzados no soportados por el nodo Redis, usa el nodo Code con una librería como ioredis.

💼 Ejemplo: Caché de API

Acelera tus integraciones

🎯 Problema

Tu flujo llama a una API externa 1000 veces/día. La API es lenta (500ms) y tiene límite de 100 requests/hora. Necesitas cachear las respuestas.

1
Webhook - Recibe request con product_id
2
Redis GET - Busca "cache:product:{{product_id}}"
3
IF - ¿Existe en caché?
4a
Cache HIT - Devolver datos cacheados ✅
4b
Cache MISS - HTTP Request a API externa
5
Redis SET - Guardar con TTL 3600 (1 hora)
6
Response - Devolver datos al cliente
Key del caché
// Genera una key única por recurso
cache:product:12345
cache:user:abc123
cache:api:weather:madrid

// TTL según frecuencia de cambio
Productos: 1 hora (3600s)
Usuarios: 5 minutos (300s)
Clima: 10 minutos (600s)

💼 Ejemplo: Rate Limiter

Protege tu API de abuso

🎯 Problema

Tu webhook recibe requests externos. Quieres limitar a 100 requests por minuto por IP para evitar abuso.

1
Webhook - Recibe request, extrae IP del header
2
Code - Genera key "rate:{{ip}}:{{minuto_actual}}"
3
Redis INCR - Incrementa contador
4
IF count == 1 - Redis EXPIRE key 60
5
IF count > 100 - Responder 429 Too Many Requests
6
ELSE - Continuar con el flujo normal
Code Node para generar key
const ip = $input.first().headers['x-forwarded-for'] || 'unknown';
const minute = Math.floor(Date.now() / 60000);
const key = `rate:${ip}:${minute}`;

return [{
  json: {
    key: key,
    ip: ip
  }
}];

💡 Pro Tip: Para rate limiting más sofisticado (sliding window, token bucket), considera usar Redis + Lua scripts o una librería especializada.

💼 Ejemplo: Cola de Tareas

Procesa trabajo en background

🎯 Problema

Recibes muchos webhooks de pagos. Procesarlos toma tiempo (enviar email, actualizar DB, llamar APIs). Necesitas responder rápido y procesar después.

📥 Flujo Productor (responde rápido)
1
Webhook - Stripe envía evento de pago
2
Redis LPUSH - Agregar a cola "payments"
3
Response - 200 OK (respuesta en <100ms)
📤 Flujo Consumidor (procesa después)
1
Schedule Trigger - Cada 5 segundos
2
Redis RPOP - Sacar tarea de cola
3
IF - ¿Hay tarea?
4
Procesar - Email, DB, APIs...

✅ Ventajas de esta arquitectura:

• Webhook responde en <100ms (Stripe happy)
• No pierdes eventos si hay pico de tráfico
• Puedes escalar consumidores independientemente
• Fácil de monitorear (LLEN para ver cola)

✅ Best Practices de Redis

Consejos de un PRO

🔑
Keys Descriptivas
Usa prefijos: "cache:", "session:", "rate:" Incluye IDs: "user:123:profile"
Siempre TTL
No llenes Redis de datos eternos. Todo caché debe expirar.
📊
Monitorea Memoria
Redis en RAM = limitado. Usa INFO memory, configura maxmemory.
🔐
Seguridad
Siempre password. Nunca exponer al internet. Usa SSL en producción.
📦
Datos Pequeños
Redis es para datos pequeños y frecuentes. No guardes blobs grandes.
💾
Persistencia
Activa RDB o AOF si los datos son importantes. Caché puede perderlo, colas no.

⚠️ Errores comunes:

• Usar KEYS * en producción (bloquea Redis)
• No poner TTL y llenar la memoria
• Guardar objetos muy grandes
• No manejar desconexiones de Redis

🧠 Quiz Final

¡Demuestra que dominas Redis!

¿Por qué Redis es tan rápido?
A) Usa un lenguaje de programación especial
B) Almacena todo en memoria RAM
C) Tiene más servidores que otras bases de datos
D) Solo funciona con datos pequeños
Quieres implementar una cola de tareas FIFO. ¿Qué comandos usarías?
A) SET y GET
B) LPUSH y RPOP
C) SADD y SMEMBERS
D) PUBLISH y SUBSCRIBE
¿Cuál es la diferencia principal entre Pub/Sub y Redis Streams?
A) Streams es más lento
B) Streams persiste mensajes, Pub/Sub no
C) Pub/Sub permite más suscriptores
D) No hay diferencia real
Implementas rate limiting de 100 req/min. ¿Qué TTL pones en la key del contador?
A) 60 segundos
B) 100 segundos
C) 3600 segundos (1 hora)
D) Sin TTL
Tu caché de Redis está lleno y no puedes agregar más datos. ¿Cuál NO es una solución válida?
A) Reducir TTL de los datos cacheados
B) Aumentar maxmemory
C) Usar KEYS * para ver qué borrar
D) Configurar una política de eviction