Redis na VPS Ubuntu: senha, memória, persistência e uso pela aplicação
Redis é um banco de dados em memória usado como cache, fila e armazenamento de sessões. Veja como instalar no Ubuntu, proteger com senha ou ACL, limitar a RAM com a política certa, escolher entre RDB e AOF e conectar a aplicação.
PorEquipe StreetHosting·Time de infraestrutura e suporte da StreetHosting
O que é Redis
Redis é um banco de dados em memória, que guarda chaves e valores na RAM e responde em frações de milissegundo. Na prática, ele aparece em quatro papéis:
- Cache: guarda o resultado de consultas pesadas para não bater no banco principal toda vez.
- Filas: organiza tarefas em segundo plano, como envio de email e processamento de imagem, com bibliotecas como BullMQ, Sidekiq e Celery.
- Sessões: guarda o login dos usuários fora do processo da aplicação, o que permite reiniciar ou ter várias instâncias sem derrubar ninguém.
- Tempo real: rankings com sorted sets, contadores, limite de requisições e mensagens com Pub/Sub.
A distinção importa porque cada papel pede uma configuração diferente. Cache pode perder dados e descartar chaves quando a memória enche. Fila e sessão não podem, e essa é a origem da maioria dos problemas com Redis em produção.
Instalar o Redis
- Atualize os repositórios:
sudo apt update - Instale o Redis:
sudo apt install -y redis-server - Confirme que o serviço está ativo:
sudo systemctl status redis-server - Teste a conexão:
redis-cli ping, que deve responder PONG
O Ubuntu 24.04 instala o Redis 7.0 e o 22.04 instala o 6.0. O serviço já sobe no boot, a configuração fica em /etc/redis/redis.conf e os dados em /var/lib/redis. Para uma versão mais nova, o projeto mantém um repositório apt próprio, com instruções na documentação oficial do Redis.
Se preferir Docker, publique a porta só no loopback: -p 127.0.0.1:6379:6379. Um simples -p 6379:6379 expõe o Redis na internet, e o Docker cria regras próprias que passam por cima do UFW.
Configurar segurança
Abra o arquivo com sudo nano /etc/redis/redis.conf e confira duas linhas que já vêm certas no Ubuntu:
bind 127.0.0.1 -::1
protected-mode yes
O bind define em quais endereços da VPS o Redis escuta; com loopback, nada de fora alcança a porta. O sinal antes do ::1 marca o IPv6 como opcional, e em versões antigas a linha aparece sem ele. O protected-mode é uma rede de segurança: enquanto o usuário padrão estiver sem senha, o Redis só aceita conexões locais. Mesmo assim, configure autenticação, porque qualquer processo da VPS alcança o loopback.
Opção A: senha única com requirepass
Gere uma senha longa com openssl rand -hex 32 e acrescente no redis.conf:
requirepass COLE_A_SENHA_GERADA
sudo systemctl restart redis-server
redis-cli --askpass ping
O Redis testa senhas muito rápido, então senha curta cai em ataque de força bruta. A de 64 caracteres hexadecimais resolve e não tem símbolos que atrapalhem na URL de conexão. O --askpass pede a senha sem gravar nada no histórico do shell.
Opção B: usuários com ACL
Com ACL, cada aplicação ganha seu usuário, e dá para tirar dela comandos que nenhuma aplicação precisa. Não use junto com o requirepass; escolha um dos dois.
# /etc/redis/redis.conf
user default off
user admin on >SENHA_DO_ADMIN ~* &* +@all
user app on >SENHA_DA_APP ~* &* +@all -@admin -flushall -flushdb
sudo systemctl restart redis-server
redis-cli --user app --askpass ping
O ~* libera todas as chaves e o &* todos os canais de Pub/Sub. O usuário app perde a categoria @admin, que inclui CONFIG, SHUTDOWN e MONITOR, e os comandos que apagam o banco inteiro. Se a aplicação tentar um deles, recebe o erro NOPERM. No Redis 6.0 do Ubuntu 22.04, retire o &*, que só existe a partir do 6.2.
Robôs varrem a internet atrás da porta 6379. Um Redis aberto e sem senha costuma ser usado para gravar uma chave SSH do atacante ou instalar um minerador de criptomoeda, justamente pelo comando CONFIG. Se outro servidor precisar do Redis, ligue o bind ao endereço de uma VPN WireGuard e libere a porta só para o IP interno, com as regras do guia de UFW.
Limitar uso de RAM
Sem limite, o Redis cresce até a RAM acabar e o kernel matar algum processo, às vezes o próprio Redis, às vezes o banco principal. Defina o teto no redis.conf:
maxmemory 1gb
maxmemory-policy allkeys-lru
Deixe folga além do maxmemory. Para gravar o snapshot, o Redis cria um processo filho, e cada página de memória alterada durante a gravação é duplicada; com muita escrita, o consumo pode se aproximar do dobro. Pelo mesmo motivo, o log do Redis avisa quando o overcommit de memória do kernel está desligado. Corrija assim:
echo "vm.overcommit_memory = 1" | sudo tee /etc/sysctl.d/90-redis.conf
sudo sysctl --system
A política define o que acontece quando o limite é atingido:
noeviction: o padrão. Não apaga nada e recusa novas escritas. É a única correta para filas e sessões; o BullMQ e o Sidekiq pedem essa política.allkeys-lru: descarta as chaves usadas há mais tempo. A escolha padrão para cache.allkeys-lfu: descarta as menos acessadas. Melhor quando poucas chaves concentram a maior parte das leituras.volatile-lru: só descarta chaves com prazo de expiração, preservando as demais.volatile-ttl: descarta primeiro as chaves que já iam expirar logo.
Com noeviction e memória cheia, a aplicação recebe OOM command not allowed when used memory > 'maxmemory'. Os bancos numerados de 0 a 15 dividem a mesma memória e a mesma política, então não separam cache de fila. Se você precisa dos dois com volume, rode duas instâncias, por exemplo uma segunda em Docker na porta 6380: uma com allkeys-lru para cache e outra com noeviction para fila e sessão.
Persistência: RDB e AOF
Redis em memória não significa dado volátil. Há dois mecanismos para gravar em disco, e eles podem trabalhar juntos:
| Modo | Como ligar | Perda máxima em uma queda | Quando usar |
|---|---|---|---|
| Só RDB, o padrão | save 3600 1 300 100 60 10000 | Tudo desde o último snapshot, de segundos a uma hora | Cache que a aplicação consegue recriar |
| AOF com everysec | appendonly yes e appendfsync everysec | Cerca de um segundo de escritas | Filas, sessões e dados que importam |
| RDB e AOF juntos | Os dois ligados | Cerca de um segundo, com snapshot compacto para cópia | Redis que guarda dado de verdade |
| Sem persistência | save vazio e appendonly no | Tudo, a cada reinício | Cache puro, pelo menor custo de disco |
O RDB é uma fotografia completa gravada em dump.rdb; a regra padrão do Redis 7 grava depois de uma hora com uma alteração, cinco minutos com 100 ou um minuto com 10 mil. O AOF anota cada escrita e, com everysec, sincroniza o arquivo com o disco uma vez por segundo, o equilíbrio recomendado entre segurança e desempenho.
Para ligar o AOF em um Redis que já tem dados, faça em tempo de execução, como recomenda a documentação oficial, e só depois grave no arquivo. Editar o redis.conf e reiniciar pode, dependendo da versão, subir o Redis a partir de um AOF vazio:
redis-cli --user admin --askpass
CONFIG SET appendonly yes
INFO persistence
CONFIG REWRITE
Espere o aof_rewrite_in_progress voltar a 0 no INFO persistence antes do CONFIG REWRITE, que grava a mudança no redis.conf. Com requirepass, conecte sem o --user admin. Persistência não é backup: copie o dump.rdb para fora da VPS com regularidade, junto com os backups do resto do servidor.
Conectar com a aplicação
Quase todos os clientes aceitam uma URL de conexão. Com requirepass, o usuário fica vazio; com ACL, vai o nome do usuário. O número no fim é o banco:
REDIS_URL=redis://:SENHA@127.0.0.1:6379/0 # requirepass
REDIS_URL=redis://app:SENHA@127.0.0.1:6379/0 # ACL
O uso mais comum como cache consulta o Redis primeiro, vai ao banco só quando a chave não existe e guarda o resultado com prazo de validade. Em Node.js com ioredis:
const Redis = require("ioredis");
const redis = new Redis(process.env.REDIS_URL);
async function buscarProduto(id) {
const chave = "produto:" + id;
const emCache = await redis.get(chave);
if (emCache) return JSON.parse(emCache);
const produto = await db.produtos.buscarPorId(id);
await redis.set(chave, JSON.stringify(produto), "EX", 300);
return produto;
}
O EX 300 expira a chave em cinco minutos, e isso limita o tempo em que um dado desatualizado pode aparecer. Quando o produto mudar, apague a chave com redis.del para a próxima leitura buscar o valor novo.
- Filas: no BullMQ, a conexão do worker precisa de
maxRetriesPerRequest: nullno ioredis. No Celery, aponte broker_url para a URL; no Sidekiq, defina REDIS_URL. Os três pedem noeviction. - Laravel: no .env, preencha REDIS_HOST e REDIS_PASSWORD e use
CACHE_STORE=redis,SESSION_DRIVER=rediseQUEUE_CONNECTION=redis. Antes do Laravel 11, a variável de cache se chamava CACHE_DRIVER. - Sessões em Node.js e Python: no Express, o pacote
connect-redis; no Django, o backend RedisCache comSESSION_ENGINE = "django.contrib.sessions.backends.cache".
O passo a passo de colocar a aplicação no ar, com Nginx e systemd, está no guia de API Node.js na VPS. Se o Redis faz cache de consultas de um PostgreSQL na mesma VPS, some a RAM dos dois ao dimensionar.
Monitorar o Redis
Conecte com redis-cli --user admin --askpass e use estes comandos:
INFO memory: compare used_memory_human com maxmemory_human e observe o mem_fragmentation_ratio.INFO stats: keyspace_hits e keyspace_misses mostram se o cache acerta; evicted_keys subindo indica memória curta.INFO persistence: rdb_last_bgsave_status e aof_last_write_status precisam estar em ok.SLOWLOG GET 10: os comandos mais lentos recentes. Como o Redis executa um comando por vez, um comando lento atrasa todos os outros.redis-cli --latencyeredis-cli --bigkeys: medem a latência e acham as chaves que mais ocupam memória.
Dois cuidados. Nunca rode KEYS em produção, porque ele varre tudo e trava o servidor; use SCAN 0 MATCH sessao:* COUNT 100. E use o MONITOR só por alguns segundos, porque ele derruba o desempenho enquanto estiver ligado. Para acompanhar CPU e RAM da VPS inteira, veja o guia de monitoramento com htop e Netdata.
Qual VPS usar para Redis
Na maioria dos projetos, o Redis roda na mesma VPS da aplicação, e o que ele consome é RAM. Por isso a VPS Xeon, com mais memória por real, é o ponto de partida: 4 GB com 3 vCPU e 40 GB de NVMe por R$ 43,00, 8 GB com 6 vCPU por R$ 77,00 e 16 GB com 9 vCPU por R$ 145,00. Como o Redis executa os comandos em uma única thread, volumes muito altos de operações rendem mais com clock alto, e aí a VPS Ryzen 9 9950X, com até 5,7 GHz e DDR5, começa em R$ 122,00 com 4 vCPU e 8 GB.
Todas as VPS da StreetHosting ficam em São Paulo, com NVMe, AntiDDoS e acesso root. Se a memória ficar curta, o upgrade pelo painel cobra só a diferença proporcional e reinicia a VM; depois dele, aumente o maxmemory à mão. Para dimensionar a VPS inteira com aplicação, banco e Redis, veja como escolher uma VPS para API.
Perguntas frequentes
- Redis é banco de dados ou cache?
- Os dois. O Redis é um banco de dados em memória que pode servir como cache, fila de tarefas, armazenamento de sessões, ranking e sistema de mensagens. A configuração muda conforme o uso: cache aceita perder dados e descartar chaves, fila e sessão não.
- O Redis perde dados quando o servidor reinicia?
- Com a configuração padrão, o Redis grava snapshots RDB periódicos e perde o que mudou desde o último. Ligando o AOF com appendfsync everysec, a perda máxima cai para cerca de um segundo. Para cache puro, dá para desligar a persistência.
- Devo expor o Redis para a internet?
- Não. O tráfego do Redis não é cifrado por padrão e a porta 6379 é varrida por robôs o tempo todo. Mantenha o bind em 127.0.0.1 e, se outro servidor precisar acessar, use uma VPN como WireGuard e libere a porta no firewall só para o IP interno.
- Quanto de RAM o Redis usa?
- O Redis usa a RAM que os dados ocupam, sem limite, até você definir maxmemory. Configure o limite deixando folga para o sistema e para o snapshot, e escolha a política de descarte: uma do tipo LRU para cache e noeviction para filas e sessões.
- Devo usar requirepass ou ACL no Redis?
- Para uma aplicação só, requirepass com uma senha longa resolve. Com mais de uma aplicação ou quando você quer impedir comandos perigosos como FLUSHALL e CONFIG no usuário da aplicação, use ACL com um usuário por aplicação e desative o usuário padrão.
Próximo passo
Ver VPS Xeon
VPS Xeon para cargas estáveis, automação e projetos de longa duração.
Guias relacionados
Como instalar PostgreSQL na VPS Ubuntu com segurança
PostgreSQL é o banco relacional open source mais completo e o padrão de muitas aplicações modernas. Veja como instalar na VPS Ubuntu, criar usuário e banco para a aplicação, entender a autenticação, liberar acesso remoto sem expor a porta, agendar backups e ajustar a memória.
Como hospedar aplicação Node.js em VPS no Brasil
Aplicação Node.js em produção pede gerenciador de processos, proxy reverso, HTTPS e reinício automático. Veja o passo a passo completo em uma VPS Ubuntu em São Paulo, perto dos seus usuários e das integrações brasileiras.
UFW na VPS Ubuntu: regras de firewall sem perder o SSH
O UFW simplifica o firewall do Ubuntu, mas uma regra na ordem errada tranca você fora da VPS. Veja como ativar sem perder o SSH, liberar só o necessário, lidar com o Docker e voltar pelo console se algo der errado.