Pular para conteúdo

Redis

O Redis é utilizado pelo n8n como serviço auxiliar de filas, cache e coordenação.

Informações desta VPS

Item Valor
Stack /opt/stacks/n8n/compose.yml
Serviço Compose redis
Container n8n-redis-1
Imagem redis:7-alpine
Porta interna 6379
Diretório no container /data
Persistência AOF Desativada
Autenticação Habilitada com senha

Senha do Redis

A senha não deve ser escrita nesta documentação, exibida em prints ou publicada em repositórios.

Status

Ver o status do serviço

docker compose -f /opt/stacks/n8n/compose.yml ps redis

Ver somente o container

docker ps --filter name=n8n-redis-1

Ver a imagem utilizada

docker inspect n8n-redis-1 --format '{{.Config.Image}}'

Ver a versão do Redis

docker exec n8n-redis-1 redis-server --version

Logs

Ver os últimos 100 registros

docker logs n8n-redis-1 --tail 100

Acompanhar os logs em tempo real

docker logs -f n8n-redis-1

Procurar erros

docker logs n8n-redis-1 2>&1 | grep -i error

Procurar avisos

docker logs n8n-redis-1 2>&1 | grep -i warning

Operação

Reiniciar somente o Redis

docker compose -f /opt/stacks/n8n/compose.yml restart redis

Impacto no n8n

Reiniciar o Redis pode interromper temporariamente filas e execuções do n8n.

Parar somente o Redis

docker compose -f /opt/stacks/n8n/compose.yml stop redis

Iniciar o Redis parado

docker compose -f /opt/stacks/n8n/compose.yml start redis

Recriar somente o Redis

docker compose -f /opt/stacks/n8n/compose.yml up -d --force-recreate redis

Teste de conexão

Como o Redis exige senha, os comandos devem usar a credencial definida no ambiente ou no Compose.

Testar sem exibir a senha

REDIS_PASSWORD="$(docker inspect n8n-redis-1 \
  --format '{{json .Config.Cmd}}' \
  | sed -n 's/.*"--requirepass","\([^"]*\)".*/\1/p')" && \
docker exec -e REDISCLI_AUTH="$REDIS_PASSWORD" n8n-redis-1 \
redis-cli --no-auth-warning ping

Resultado esperado:

PONG

Consultar informações gerais

REDIS_PASSWORD="$(docker inspect n8n-redis-1 \
  --format '{{json .Config.Cmd}}' \
  | sed -n 's/.*"--requirepass","\([^"]*\)".*/\1/p')" && \
docker exec -e REDISCLI_AUTH="$REDIS_PASSWORD" n8n-redis-1 \
redis-cli --no-auth-warning INFO

Ver uso de memória

REDIS_PASSWORD="$(docker inspect n8n-redis-1 \
  --format '{{json .Config.Cmd}}' \
  | sed -n 's/.*"--requirepass","\([^"]*\)".*/\1/p')" && \
docker exec -e REDISCLI_AUTH="$REDIS_PASSWORD" n8n-redis-1 \
redis-cli --no-auth-warning INFO memory

Ver quantidade de chaves

REDIS_PASSWORD="$(docker inspect n8n-redis-1 \
  --format '{{json .Config.Cmd}}' \
  | sed -n 's/.*"--requirepass","\([^"]*\)".*/\1/p')" && \
docker exec -e REDISCLI_AUTH="$REDIS_PASSWORD" n8n-redis-1 \
redis-cli --no-auth-warning DBSIZE

Persistência

Verificar se o AOF está habilitado

REDIS_PASSWORD="$(docker inspect n8n-redis-1 \
  --format '{{json .Config.Cmd}}' \
  | sed -n 's/.*"--requirepass","\([^"]*\)".*/\1/p')" && \
docker exec -e REDISCLI_AUTH="$REDIS_PASSWORD" n8n-redis-1 \
redis-cli --no-auth-warning CONFIG GET appendonly

Estado atual:

appendonly
no

Verificar configuração de snapshots RDB

REDIS_PASSWORD="$(docker inspect n8n-redis-1 \
  --format '{{json .Config.Cmd}}' \
  | sed -n 's/.*"--requirepass","\([^"]*\)".*/\1/p')" && \
docker exec -e REDISCLI_AUTH="$REDIS_PASSWORD" n8n-redis-1 \
redis-cli --no-auth-warning CONFIG GET save

Forçar snapshot RDB

REDIS_PASSWORD="$(docker inspect n8n-redis-1 \
  --format '{{json .Config.Cmd}}' \
  | sed -n 's/.*"--requirepass","\([^"]*\)".*/\1/p')" && \
docker exec -e REDISCLI_AUTH="$REDIS_PASSWORD" n8n-redis-1 \
redis-cli --no-auth-warning BGSAVE

Resultado esperado:

Background saving started

Verificar último snapshot

REDIS_PASSWORD="$(docker inspect n8n-redis-1 \
  --format '{{json .Config.Cmd}}' \
  | sed -n 's/.*"--requirepass","\([^"]*\)".*/\1/p')" && \
docker exec -e REDISCLI_AUTH="$REDIS_PASSWORD" n8n-redis-1 \
redis-cli --no-auth-warning LASTSAVE

Volume persistente

Ver os volumes montados

docker inspect n8n-redis-1 \
  --format '{{range .Mounts}}{{println .Type "|" .Name "|" .Source "|" .Destination}}{{end}}'

Ver o volume pelo Docker

docker volume inspect \
46dfb8b004374a9b747331267892b51567f36ee93976c8d95841071bc0ad2986

Ver o espaço utilizado

du -sh \
/var/lib/docker/volumes/46dfb8b004374a9b747331267892b51567f36ee93976c8d95841071bc0ad2986/_data

Volume anônimo

O Redis usa um volume Docker com nome gerado automaticamente. É preferível usar futuramente um volume nomeado, como n8n_redisdata, para facilitar manutenção, backup e identificação.

Backup

Criar diretório de backup

mkdir -p /opt/backups/redis

Forçar snapshot antes do backup

REDIS_PASSWORD="$(docker inspect n8n-redis-1 \
  --format '{{json .Config.Cmd}}' \
  | sed -n 's/.*"--requirepass","\([^"]*\)".*/\1/p')" && \
docker exec -e REDISCLI_AUTH="$REDIS_PASSWORD" n8n-redis-1 \
redis-cli --no-auth-warning BGSAVE

Copiar o arquivo RDB

docker cp n8n-redis-1:/data/dump.rdb \
/opt/backups/redis/dump-$(date +%Y%m%d-%H%M%S).rdb

Listar os backups

ls -lh /opt/backups/redis

Atualização

Ver a versão atual

docker exec n8n-redis-1 redis-server --version

Baixar a imagem configurada

docker compose -f /opt/stacks/n8n/compose.yml pull redis

Recriar o serviço

docker compose -f /opt/stacks/n8n/compose.yml up -d redis

Verificar a saúde

docker compose -f /opt/stacks/n8n/compose.yml ps redis

Verificar os logs

docker logs n8n-redis-1 --tail 100

Testar após a atualização

REDIS_PASSWORD="$(docker inspect n8n-redis-1 \
  --format '{{json .Config.Cmd}}' \
  | sed -n 's/.*"--requirepass","\([^"]*\)".*/\1/p')" && \
docker exec -e REDISCLI_AUTH="$REDIS_PASSWORD" n8n-redis-1 \
redis-cli --no-auth-warning ping

Troubleshooting

Redis aparece como unhealthy

docker inspect n8n-redis-1 \
  --format '{{json .State.Health}}'
docker logs n8n-redis-1 --tail 200
docker compose -f /opt/stacks/n8n/compose.yml ps redis

Erro de autenticação

Sintoma:

NOAUTH Authentication required

Isso indica que o comando foi enviado sem a senha correta.

Teste usando a senha extraída sem exibi-la:

REDIS_PASSWORD="$(docker inspect n8n-redis-1 \
  --format '{{json .Config.Cmd}}' \
  | sed -n 's/.*"--requirepass","\([^"]*\)".*/\1/p')" && \
docker exec -e REDISCLI_AUTH="$REDIS_PASSWORD" n8n-redis-1 \
redis-cli --no-auth-warning ping

n8n não conecta ao Redis

Verificar o Redis:

docker compose -f /opt/stacks/n8n/compose.yml ps redis

Verificar os logs:

docker logs n8n-redis-1 --tail 100

Verificar o n8n:

docker logs n8n-n8n-1 --tail 100

Verificar as variáveis sem mostrar a senha:

docker inspect n8n-n8n-1 \
  --format '{{range .Config.Env}}{{println .}}{{end}}' \
  | grep -E '^(QUEUE_BULL_REDIS_HOST|QUEUE_BULL_REDIS_PORT|EXECUTIONS_MODE)='

Uso elevado de memória

REDIS_PASSWORD="$(docker inspect n8n-redis-1 \
  --format '{{json .Config.Cmd}}' \
  | sed -n 's/.*"--requirepass","\([^"]*\)".*/\1/p')" && \
docker exec -e REDISCLI_AUTH="$REDIS_PASSWORD" n8n-redis-1 \
redis-cli --no-auth-warning INFO memory

Ver clientes conectados

REDIS_PASSWORD="$(docker inspect n8n-redis-1 \
  --format '{{json .Config.Cmd}}' \
  | sed -n 's/.*"--requirepass","\([^"]*\)".*/\1/p')" && \
docker exec -e REDISCLI_AUTH="$REDIS_PASSWORD" n8n-redis-1 \
redis-cli --no-auth-warning CLIENT LIST

Boas práticas

  • Não expor a porta 6379 à internet.
  • Não registrar a senha em documentação ou repositórios.
  • Manter autenticação habilitada.
  • Utilizar volume nomeado em vez de volume anônimo.
  • Fazer backup antes de atualizações relevantes.
  • Monitorar consumo de memória.
  • Testar o comando PING após reinícios.
  • Considerar AOF apenas após avaliar impacto em disco e desempenho.