Se sua API consulta o Postgres/MySQL toda vez que o usuário carrega o perfil, você está desperdiçando recursos. 90% das leituras são repetidas.
Redis é um banco de dados em memória (RAM). Ler do Redis leva microsegundos. Ler do disco leva milissegundos.
O Padrão Cache-Aside
- A aplicação pede o dado.
- Verifica no Redis.
- Hit: Retorna imediatamente.
- Miss: Busca no Banco SQL, salva no Redis (com tempo de expiração), e retorna.
// Exemplo com Upstash Redis
import { Redis } from '@upstash/redis'
const redis = new Redis(...)
async function getUser(id) {
const cached = await redis.get(`user:${id}`)
if (cached) return cached
const user = await db.user.find(id)
await redis.set(`user:${id}`, user, { ex: 3600 }) // Expira em 1h
return user
}
Rate Limiting
Redis também é perfeito para impedir abuso da API. Você pode contar quantas requisições um IP fez nos últimos 60 segundos e bloquear se passar do limite.
Estratégias de Expiração
- TTL fixo: Dados que mudam pouco (ex: lista de países) podem ter TTL de 24h.
- TTL curto: Dados que mudam com frequência (ex: estoque) — 5 a 15 minutos.
- Cache invalidation: Ao atualizar um registro no banco, delete a chave correspondente no Redis para forçar refresh na próxima leitura.
Redis Serverless (Upstash, Redis Cloud)
Para aplicações serverless, Redis tradicional (sempre ligado) pode ser caro. Upstash e similares oferecem Redis em modelo pay-per-request, ideal para Lambdas e Edge Functions que não mantêm conexão persistente.
Implementar Redis é a otimização de backend com maior ROI (Retorno sobre Investimento) que existe.