Redis: Mais Que um Cache
Redis é um store de estruturas de dados em memória. A maioria usa como cache, mas seus tipos de dados permitem armazenamento de sessões, leaderboards em tempo real, rate limiting, pub/sub e filas de jobs — tudo com latência sub-milissegundo.
Visão Geral dos Tipos
| Tipo | Caso de Uso | Exemplo |
|---|---|---|
| String | Cache, contadores, sessões | Cache de página, contador de rate limit |
| Hash | Armazenamento de objetos | Perfil de usuário, detalhes de produto |
| List | Filas, feeds de atividade | Fila de jobs, mensagens recentes |
| Set | Coleções únicas, tags | Usuários online, visitantes únicos |
| Sorted Set | Rankings, time-series | Leaderboard, fila de prioridade |
Strings
SET user:session:abc123 "{\"userId\": 42}"
GET user:session:abc123
SET cache:page:/home "html" EX 3600 # expira em 1 hora
INCR api:rate:user:42 # contador atômico
SET lock:order:123 "worker-1" NX EX 30 # lock distribuídoHashes (Objetos)
HSET user:42 name "Alice" email "alice@example.com" role "admin"
HGET user:42 name
HGETALL user:42
HINCRBY user:42 login_count 1Lists (Filas)
LPUSH queue:emails "{\"to\": \"user@example.com\"}"
BRPOP queue:emails 30 # pop bloqueante
LPUSH activity:user:42 "Logou"
LTRIM activity:user:42 0 99 # mantém últimos 100Sets (Coleções Únicas)
SADD online:users "user:42" "user:17"
SISMEMBER online:users "user:42" # true
SINTER tag:javascript tag:react # interseçãoSorted Sets (Rankings)
ZADD leaderboard 1500 "player:alice"
ZADD leaderboard 2200 "player:bob"
ZREVRANGE leaderboard 0 9 WITHSCORES # top 10
ZINCRBY leaderboard 100 "player:alice"Padrão Comum: Cache com 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;
}Formate seus dados: Formatador JSON — formate valores JSON do Redis.