Concepto clave
Redis es un almacén de estructuras de datos en memoria que funciona como base de datos NoSQL, cache, broker de mensajes y cola de trabajos. Su principal ventaja en producción es la velocidad: al mantener los datos en RAM, ofrece latencias de microsegundos para operaciones de lectura y escritura.
Para un Backend Engineer, Redis resuelve tres problemas críticos: cache (almacenamiento temporal de resultados costosos), sesiones (gestión de estado de usuario distribuido) y queues (procesamiento asíncrono de tareas). Imagina un restaurante de comida rápida: el cache es como tener las hamburguesas más pedidas ya preparadas, las sesiones son la memoria del camarero sobre tu pedido actual, y las colas son la lista de pedidos en la cocina esperando ser procesados.
Cómo funciona en la práctica
Veamos un ejemplo paso a paso de configuración de Redis para cache en una aplicación web:
- Instalación:
sudo apt-get install redis-server - Configuración básica en
/etc/redis/redis.conf:maxmemory 1gb- límite de memoriamaxmemory-policy allkeys-lru- política de evicciónbind 127.0.0.1- seguridad básica
- En tu aplicación (ejemplo Python con redis-py):
import redis import json # Conexión r = redis.Redis(host='localhost', port=6379, db=0) # Cache de consulta de usuario def get_user_profile(user_id): cache_key = f"user:{user_id}:profile" cached = r.get(cache_key) if cached: return json.loads(cached) # Consulta costosa a base de datos profile = database.query_user(user_id) # Almacenar en cache por 5 minutos r.setex(cache_key, 300, json.dumps(profile)) return profile
Caso de estudio
E-commerce con alto tráfico: Una plataforma que maneja 10,000 peticiones por segundo necesita reducir la carga de su base de datos principal.
"Implementamos Redis como cache de productos, reduciendo la latencia de 200ms a 2ms y bajando la carga de la base de datos en un 70%." - CTO de la empresa
Solución implementada:
| Componente | Uso de Redis | Configuración |
|---|---|---|
| Cache de productos | Almacenar páginas de productos por 10 minutos | maxmemory 2gb, allkeys-lru |
| Sesiones de usuario | Carritos de compra y preferencias | TTL de 30 días, replicación |
| Cola de pedidos | Procesamiento asíncrono | Listas con BRPOP |
Errores comunes
- No configurar límites de memoria: Redis puede consumir toda la RAM del servidor. Solución: siempre definir
maxmemoryymaxmemory-policy. - Usar Redis como base de datos principal: Los datos en memoria son volátiles. Solución: usar Redis solo para datos que puedas recrear o perder.
- No manejar fallos de conexión: En producción, Redis puede fallar. Solución: implementar circuit breakers y reintentos con backoff exponencial.
- Serialización ineficiente: Usar formatos pesados como XML. Solución: preferir JSON, MessagePack o protocol buffers.
- Olvidar TTLs: Datos de cache que nunca expiran. Solución: siempre definir tiempos de expiración apropiados al uso.
Checklist de dominio
- Puedo configurar Redis con límites de memoria y políticas de evicción
- Sé implementar cache con patrones como cache-aside o write-through
- Puedo gestionar sesiones distribuidas con expiración automática
- Sé implementar colas de trabajos con PUB/SUB o listas
- Puedo monitorear Redis con INFO y comandos como MEMORY USAGE
- Sé implementar replicación básica para alta disponibilidad
- Puedo manejar fallos de Redis en mi aplicación
Implementación de cache y cola en una API REST
Vas a implementar un sistema de cache para consultas de productos y una cola para procesamiento de pedidos en una API REST simulada.
- Crea un servidor Redis local o usa un contenedor Docker:
docker run -p 6379:6379 redis:alpine - Implementa un endpoint
GET /products/:idque:- Primero busque en Redis con clave
product:{id} - Si no existe, simule una consulta costosa (sleep de 100ms)
- Almacene el resultado en Redis con TTL de 60 segundos
- Retorne el producto en formato JSON
- Primero busque en Redis con clave
- Implementa un endpoint
POST /ordersque:- Valide los datos del pedido
- Encole el pedido en una lista Redis llamada
orders_queue - Retorne un ID de pedido inmediatamente
- Crea un worker que:
- Use
BRPOPpara consumir pedidos de la cola - Simule procesamiento (log a consola)
- Maneje errores sin perder el pedido
- Use
- Prueba el sistema con 10 peticiones concurrentes al endpoint de productos
- Usa redis-py o la librería equivalente en tu lenguaje
- Para el worker, considera usar un proceso separado o hilo
- Implementa logging para ver el flujo de cache hits/misses
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.