Redis com Docker na VPS: cache e filas
Redis é um banco de dados em memória usado para cache, filas de jobs, sessões e pub/sub. É uma dependência comum de apps self-hosted: n8n usa Redis para filas, Chatwoot para ActionCable e Sidekiq, apps Node.js com BullMQ. Configurar Redis para produção exige definir limit de memória e política de eviction — sem isso, o Redis pode consumir toda a RAM da VPS.
Instalar Redis com Docker Compose
A configuração mínima para Redis em produção inclui limite de memória, política de eviction e persistência:
services:
redis:
image: redis:7-alpine
restart: always
command: >
redis-server
--maxmemory 256mb
--maxmemory-policy allkeys-lru
--save 60 1000
--appendonly yes
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 3s
retries: 5
deploy:
resources:
limits:
memory: 320M
volumes:
redis_data:Políticas de eviction: qual escolher
A política de eviction define o que acontece quando o Redis atinge maxmemory. A escolha depende do uso:
# allkeys-lru — CACHE GERAL
# Remove qualquer chave (com ou sem TTL) pela política LRU
# Use para: cache de objetos, cache de sessões sem TTL fixo
--maxmemory-policy allkeys-lru
# volatile-lru — CACHE COM EXPIRAÇÃO
# Remove apenas chaves com TTL configurado, pela política LRU
# Use para: cache onde algumas chaves são permanentes (não devem ser evicadas)
--maxmemory-policy volatile-lru
# noeviction — FILAS E DADOS CRÍTICOS
# Retorna erro ao tentar escrever quando memória está cheia
# Use para: Sidekiq jobs, BullMQ queues — nunca perder dados da fila
--maxmemory-policy noeviction
# allkeys-lfu — CACHE DE ALTA FREQUÊNCIA (Redis 4+)
# Remove chaves menos frequentemente usadas (LFU em vez de LRU)
# Melhor que LRU para caches com acesso skewed (80/20)
--maxmemory-policy allkeys-lfuPersistência: RDB vs AOF
Redis tem dois mecanismos de persistência para sobreviver a reinicializações:
# RDB — snapshot periódico (padrão)
# Salva snapshot completo em arquivo .rdb em intervalos configurados
# Vantagem: arquivo menor, restore mais rápido
# Desvantagem: pode perder dados desde o último snapshot
--save 900 1 # salvar se >= 1 chave mudou em 900 segundos
--save 300 10 # salvar se >= 10 chaves mudaram em 300 segundos
--save 60 1000 # salvar se >= 1000 chaves mudaram em 60 segundos
# AOF — append-only file
# Registra cada operação de escrita em um log
# Vantagem: perda mínima de dados (máximo 1 segundo)
# Desvantagem: arquivo maior, rebuild mais lento
--appendonly yes
--appendfsync everysec # flush a cada segundo (melhor trade-off)
# RDB + AOF (recomendado para filas/dados críticos)
--save 60 1000
--appendonly yesMonitoramento e diagnóstico
Comandos para monitorar o Redis em produção:
# Informações gerais (memória, conexões, uptime)
docker compose exec redis redis-cli info server | grep -E "redis_version|uptime"
docker compose exec redis redis-cli info memory | grep -E "used_memory_human|maxmemory_human|mem_fragmentation"
docker compose exec redis redis-cli info stats | grep -E "total_commands|instantaneous_ops|evicted_keys"
# Ver chaves por padrão (cuidado em produção — pode travar)
docker compose exec redis redis-cli --scan --pattern "bull:*" | head -20
# Monitorar comandos em tempo real (diagnóstico)
docker compose exec redis redis-cli monitor
# Verificar filas BullMQ/Bull
docker compose exec redis redis-cli llen bull:nome-da-fila
# Flush de cache (apaga TODAS as chaves — cuidado!)
docker compose exec redis redis-cli flushdb # apenas o banco atual
docker compose exec redis redis-cli flushall # todos os bancosProteger o Redis com senha
Redis não requer autenticação por padrão. Em VPS compartilhada ou com porta exposta, configure uma senha:
# Adicionar ao comando do Redis no docker-compose.yml
command: >
redis-server
--requirepass ${REDIS_PASSWORD}
--maxmemory 256mb
--maxmemory-policy allkeys-lru
# Conectar com autenticação
docker compose exec redis redis-cli -a ${REDIS_PASSWORD} ping
# Na URL de conexão da aplicação
REDIS_URL=redis://:sua_senha@redis:6379
# n8n: variável de ambiente
QUEUE_BULL_REDIS_PASSWORD=sua_senha
# Chatwoot: variável de ambiente
REDIS_URL=redis://:sua_senha@redis:6379/0$ runstack deploy --plan starter
Não quer configurar manualmente?
Não quer configurar manualmente? Implante o Redis em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.