Redis: Más Que un Caché
Redis es un store de estructuras de datos en memoria. La mayoría lo usa como caché, pero sus tipos de datos permiten almacenamiento de sesiones, leaderboards en tiempo real, rate limiting, pub/sub y colas de jobs — todo con latencia sub-milisegundo.
Vista General de Tipos
| Tipo | Caso de Uso | Ejemplo |
|---|---|---|
| String | Caché, contadores, sesiones | Caché de página, contador de rate limit |
| Hash | Almacenamiento de objetos | Perfil de usuario, detalles de producto |
| List | Colas, feeds de actividad | Cola de jobs, mensajes recientes |
| Set | Colecciones únicas, tags | Usuarios online, visitantes únicos |
| Sorted Set | Rankings, time-series | Leaderboard, cola de prioridad |
Strings
SET user:session:abc123 "{\"userId\": 42}"
GET user:session:abc123
SET cache:page:/home "html" EX 3600
INCR api:rate:user:42
SET lock:order:123 "worker-1" NX EX 30Hashes (Objetos)
HSET user:42 name "Alice" email "alice@example.com"
HGET user:42 name
HGETALL user:42
HINCRBY user:42 login_count 1Lists (Colas)
LPUSH queue:emails "{\"to\": \"user@example.com\"}"
BRPOP queue:emails 30
LTRIM activity:user:42 0 99Sets (Colecciones Únicas)
SADD online:users "user:42" "user:17"
SISMEMBER online:users "user:42"
SINTER tag:javascript tag:reactSorted Sets (Rankings)
ZADD leaderboard 1500 "player:alice"
ZADD leaderboard 2200 "player:bob"
ZREVRANGE leaderboard 0 9 WITHSCORES
ZINCRBY leaderboard 100 "player:alice"Patrón Común: Caché con Fallback
import Redis from 'ioredis';
const redis = new Redis(process.env.REDIS_URL);
async function getCached(key, fetchFn, ttl = 3600) {
const cached = await redis.get(key);
if (cached) return JSON.parse(cached);
const data = await fetchFn();
await redis.set(key, JSON.stringify(data), 'EX', ttl);
return data;
}Formatea tus datos: Formateador JSON — formatea valores JSON de Redis.