Concepto clave
Redis es un almacén de estructuras de datos en memoria que funciona como base de datos, caché y agente de mensajes. En producción, dominar sus comandos esenciales es como aprender las herramientas básicas de un taller: sin ellas, no puedes construir nada sólido. Para un Backend Engineer, estos comandos son el puente entre la teoría y aplicaciones reales como caché, sesiones y colas.
Imagina Redis como una cocina de restaurante: los ingredientes (datos) deben almacenarse, recuperarse y procesarse rápidamente para servir platos (respuestas) a los clientes (usuarios). Los comandos básicos son como las técnicas de corte y cocción: si las dominas, optimizas el flujo de trabajo. En este contexto, nos enfocamos en operaciones para cache (almacenamiento temporal), pub/sub (comunicación en tiempo real) y job queues (procesamiento en cola), que son pilares en backend moderno.
Cómo funciona en la práctica
Vamos a desglosar un ejemplo paso a paso usando comandos para cache. Supón que tienes una aplicación web que necesita cachear resultados de una API costosa. Primero, conecta a Redis desde la terminal o un cliente:
redis-cliLuego, usa estos comandos esenciales:
- SET: Almacena un valor con una clave y tiempo de expiración (TTL). Ejemplo:
SET user:123:profile '{"name":"Ana","role":"admin"}' EX 300guarda datos por 300 segundos. - GET: Recupera el valor. Ejemplo:
GET user:123:profiledevuelve el JSON. - DEL: Elimina una clave. Ejemplo:
DEL user:123:profileborra la entrada del cache. - EXISTS: Verifica si una clave existe. Ejemplo:
EXISTS user:123:profiledevuelve 1 si existe, 0 si no.
Para pub/sub, usa PUBLISH y SUBSCRIBE. Ejemplo: en una terminal, suscríbete a un canal: SUBSCRIBE notificaciones. En otra, publica un mensaje: PUBLISH notificaciones "Nuevo pedido recibido". El suscriptor recibe el mensaje en tiempo real.
Caso de estudio
Considera una plataforma de e-commerce que usa Redis para cache, sesiones y colas. En un escenario de alto tráfico, como el Black Friday, se aplican comandos esenciales así:
| Componente | Comando Redis | Uso en producción |
|---|---|---|
| Cache de productos | SET/GET con TTL | Almacena datos de productos populares por 5 minutos para reducir carga en la BD. |
| Sesión de usuario | SETEX/GET | Guarda la sesión del usuario (ej., carrito) con expiración automática tras inactividad. |
| Cola de pedidos | LPUSH/RPOP | Encola pedidos nuevos con LPUSH y procesa con RPOP en workers. |
En este caso, el uso de TTL en cache evita datos obsoletos, mientras que las colas aseguran procesamiento ordenado bajo carga pico.
Errores comunes
- No usar TTL en cache: Almacenar datos sin expiración puede llenar la memoria y causar fallos. Solución: Siempre define un TTL con SETEX o el parámetro EX en SET.
- Confundir estructuras de datos: Usar Strings para listas o Hashes para simples valores reduce eficiencia. Solución: Aprende cuándo usar cada tipo (ej., Hashes para objetos, Lists para colas).
- Ignorar el manejo de errores en pub/sub: Si un suscriptor se desconecta, puede perder mensajes. Solución: Implementa reconexión automática y logs.
- No monitorear el uso de memoria: Redis en memoria puede agotarse rápido. Solución: Usa comandos como INFO memory y configura límites.
- Usar GET/SET para sesiones sin atomicidad: En entornos concurrentes, esto puede causar race conditions. Solución: Usa comandos atómicos como SETNX o transacciones con MULTI/EXEC.
Checklist de dominio
- Puedo almacenar y recuperar datos en Redis usando SET y GET con TTL para cache.
- Sé implementar una cola simple con LPUSH y RPOP para procesamiento asíncrono.
- Puedo configurar pub/sub con PUBLISH y SUBSCRIBE para notificaciones en tiempo real.
- Entiendo cuándo usar diferentes estructuras de datos (Strings, Hashes, Lists) según el caso.
- Manejo errores comunes como falta de TTL o desbordamiento de memoria.
- Verifico la existencia de claves con EXISTS y las elimino con DEL cuando sea necesario.
- Uso comandos atómicos para operaciones críticas como sesiones de usuario.
Implementa un sistema de cache y cola con Redis
En este ejercicio, simularás un backend que usa Redis para cachear resultados de una API y manejar una cola de tareas. Sigue estos pasos:
- Instala Redis localmente o usa un servicio en la nube. Asegúrate de tener acceso a redis-cli o un cliente similar.
- Crea un script o usa la terminal para ejecutar comandos. Primero, cachea un producto: usa
SET product:1001 '{"name":"Laptop","price":999}' EX 60para almacenar por 60 segundos. - Recupera el producto cacheado con
GET product:1001y verifica que devuelva el JSON. - Implementa una cola de pedidos: usa
LPUSH orders "pedido_123"para agregar un pedido, luego procesa conRPOP orderspara sacarlo. - Configura pub/sub: en una sesión, corre
SUBSCRIBE alerts. En otra, publica un mensaje conPUBLISH alerts "Stock bajo en producto 1001". - Monitorea el uso con
INFO memoryy limpia claves expiradas si es necesario.
Documenta los resultados y reflexiona sobre cómo esto se aplicaría en un entorno de producción real.
Pistas- Usa el comando TTL para ver cuánto tiempo queda en el cache antes de expirar.
- Si RPOP no devuelve nada, verifica que la cola tenga elementos con LLEN.
- En pub/sub, asegúrate de que ambas terminales estén conectadas al mismo servidor Redis.
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.