Saltar al contenido

Lección 4 de 21 · Lectura y práctica

Quiz: Evaluación de Conceptos Básicos de Redis

Tipo de lección: QuizConcepto claveRedis 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.

Del concepto a la práctica

Taller de esta lección

La decisión central de esta evaluación es asociar cada necesidad con una garantía. Un catálogo repetido puede ser cache; una sesión necesita recuperar estado por identificador; Pub/Sub sirve para receptores conectados; una cola requiere conservar trabajos pendientes. La velocidad por sí sola no determina la elección.

Ejemplo resuelto

Para producto:7, sesion:abc y cola:emails, la clasificación es respectivamente string temporal, hash o JSON de sesión, y lista de trabajos. Si producto:7 tiene TTL 120 y sesion:abc TTL 900, no son intercambiables: su caducidad responde a políticas distintas.

Para notificación durable escoge una estructura/cola con reconocimiento y recuperación de pendientes; una lista BRPOP simple pierde el trabajo retirado si muere el consumidor. Persistencia RDB/AOF determina qué sobrevive al reinicio de Redis; no confundas reiniciar el proceso web con perder la base Redis. Una cache puede reconstruirse de la fuente, pero perder una sesión requiere un flujo de autenticación/carrito definido.

Pruébalo

  1. Clasifica una notificación que no debe perderse si el receptor está desconectado.

  2. Elige entre cache y fuente principal para guardar el precio definitivo.

  3. Decide qué estructura representa cinco trabajos pendientes.

  4. Anota la consecuencia de reiniciar Redis en cada caso.

Comprueba tu resultado

Error frecuente: llamar “cola” a Pub/Sub porque ambos transmiten mensajes. Corrige recordando que Pub/Sub no conserva mensajes para suscriptores ausentes. Resultado esperado: la notificación durable se encola o persiste en otro sistema; el precio definitivo queda en la fuente principal; los trabajos se representan como elementos pendientes.

Diagrama de decisión con ramas Sí y No y un bucle que procesa cada elemento de una lista.
CursaloMapa de práctica
Cómo avanza un programa

Una condición decide qué camino ejecuta el programa. Un bucle repite una operación mientras queden elementos, y termina cuando la lista se agota. Separar ambas ideas ayuda a seguir el flujo y comprobar casos límite.

Ver la infografía en tamaño completo ↗

Tipo de lección: Quiz

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:

  1. Instalación: sudo apt-get install redis-server
  2. Configuración básica en /etc/redis/redis.conf:
    • maxmemory 1gb - límite de memoria
    • maxmemory-policy allkeys-lru - política de evicción
    • bind 127.0.0.1 - seguridad básica
  3. 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:

ComponenteUso de RedisConfiguración
Cache de productosAlmacenar páginas de productos por 10 minutosmaxmemory 2gb, allkeys-lru
Sesiones de usuarioCarritos de compra y preferenciasTTL de 30 días, replicación
Cola de pedidosProcesamiento asíncronoListas con BRPOP

Errores comunes

  • No configurar límites de memoria: Redis puede consumir toda la RAM del servidor. Solución: siempre definir maxmemory y maxmemory-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

  1. Puedo configurar Redis con límites de memoria y políticas de evicción
  2. Sé implementar cache con patrones como cache-aside o write-through
  3. Puedo gestionar sesiones distribuidas con expiración automática
  4. Sé implementar colas de trabajos con PUB/SUB o listas
  5. Puedo monitorear Redis con INFO y comandos como MEMORY USAGE
  6. Sé implementar replicación básica para alta disponibilidad
  7. 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.

  1. Crea un servidor Redis local o usa un contenedor Docker: docker run -p 6379:6379 redis:alpine
  2. Implementa un endpoint GET /products/:id que:
    • 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
  3. Implementa un endpoint POST /orders que:
    • Valide los datos del pedido
    • Encole el pedido en una lista Redis llamada orders_queue
    • Retorne un ID de pedido inmediatamente
  4. Crea un worker que:
    • Use BRPOP para consumir pedidos de la cola
    • Simule procesamiento (log a consola)
    • Maneje errores sin perder el pedido
  5. Prueba el sistema con 10 peticiones concurrentes al endpoint de productos
Pistas
  • 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.

Sigue con Redis en Producción: Cache, Sesiones y Colas para Backend Engineers

Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.

Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.

01 / ELEGIR UNA RUTA

El próximo paso

Aprende IA mientras construyes algo que sí necesitas.

Empieza por el curso inicial o explora el catálogo para encontrar una práctica alineada con tu trabajo.