EQVPS
PainelComeçar

Como instalar o Redis num VPS: limite de memória, persistência e uma senha que não se perde

Instale o Redis no Ubuntu 24.04, limite a memória para ele não ocupar o servidor inteiro, ative o arquivo AOF sem apagar seus dados e defina uma senha que sobrevive a reinícios. Dois desses passos têm armadilhas em que caímos no nosso próprio servidor de teste.

O Redis guarda dados na memória e responde em cerca de um milissegundo, por isso está por trás de tantas aplicações como cache, fila ou armazenamento de sessões. A instalação é um comando. O trabalho está nos padrões: sem limite de memória, snapshots que podem perder gravações recentes e dois erros fáceis que apagam seus dados ou desligam sua senha sem aviso. Este guia cobre tudo isso no Ubuntu 24.04. Fizemos cada passo na nossa imagem; os números vêm de um servidor Micro (2 vCPU, 2 GB).

Você precisa de um usuário com sudo. O guia de configuração do Ubuntu cria um.

1. Instalar

sudo apt update
sudo apt install -y redis-server
redis-server --version
redis-cli ping

A instalação levou 13 segundos e nos deu o Redis 7.0.15. Ele inicia na hora e a cada boot, responde PONG e escuta apenas no próprio servidor: 127.0.0.1:6379 e [::1]:6379, com protected-mode yes. Sem dados, usava 13,5 MB de RAM.

O log já trazia um aviso:

WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition.

O Redis salva no disco a partir de uma cópia de si mesmo criada com fork, e com a configuração padrão do kernel esse fork pode falhar quando a memória está apertada. Corrija uma vez:

echo 'vm.overcommit_memory = 1' | sudo tee /etc/sysctl.d/90-redis.conf
sudo sysctl -p /etc/sysctl.d/90-redis.conf
sudo systemctl restart redis-server

Depois do reinício, o aviso sumiu.

2. Limitar a memória

De fábrica, maxmemory é 0, ou seja, sem limite, e a política é noeviction. O Redis vai ocupando RAM até o servidor ficar sem. Defina um teto e decida o que acontece quando ele for atingido:

redis-cli CONFIG SET maxmemory 256mb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
redis-cli CONFIG REWRITE

Testamos as duas políticas com limite de 64 MB e 400.000 gravações:

  • noeviction (padrão): a memória parou em 63 MB e as gravações novas falharam com OOM command not allowed when used memory > 'maxmemory'. Certo para uma fila ou qualquer coisa que você não pode perder.
  • allkeys-lru: o Redis descartou as chaves usadas há mais tempo, 48.606 delas, e todas as gravações passaram. Certo para um cache.

O CONFIG REWRITE salva as configurações em uso em /etc/redis/redis.conf, para que sobrevivam a um reinício. Ele também acrescenta uma linha que você precisa conhecer antes do passo 4.

3. Escolher como salvar no disco

Por padrão, o Redis grava um snapshot (/var/lib/redis/dump.rdb) após 1 mudança em uma hora, 100 em cinco minutos ou 10.000 em um minuto. Testamos três jeitos de pará-lo:

Como o Redis parouSó snapshots (padrão)Com o arquivo AOF
systemctl restartNada perdido: ele salva ao desligarNada perdido
Morto com kill -9A chave gravada após o último snapshot sumiuUma chave gravada 2 segundos antes estava lá

Nos dois casos, o systemd reiniciou o Redis sozinho em segundos.

Se o Redis guarda dados que fariam falta, ative o arquivo AOF (append-only file). Ele registra cada gravação e a descarrega no disco uma vez por segundo. Faça isso com o servidor rodando, não editando o arquivo:

redis-cli CONFIG SET appendonly yes
redis-cli CONFIG REWRITE
redis-cli INFO persistence | grep aof_

Primeiro tentamos o outro caminho, e ele nos custou os dados. Trocamos appendonly no por appendonly yes no redis.conf e reiniciamos. O Redis voltou com um AOF vazio e não carregou nada do snapshot, então todas as chaves existentes sumiram. Ao desligar depois, ainda gravou seu novo conteúdo, já sem as chaves antigas, por cima do dump.rdb. O CONFIG SET evita isso: o Redis primeiro grava o AOF a partir dos dados na memória. Depois de um reinício, todas as nossas chaves estavam lá.

Se o Redis é um cache puro que pode começar vazio, faça o contrário e desligue o salvamento com redis-cli CONFIG SET save "".

4. Definir uma senha

Aqui está a segunda armadilha. Depois de qualquer CONFIG REWRITE, o Redis 7 acrescenta esta linha no fim do redis.conf:

user default on nopass ~* &* +@all

Ela quer dizer «o usuário padrão não precisa de senha». Depois adicionamos requirepass mais acima no arquivo e reiniciamos. O Redis continuou respondendo PONG sem senha, porque a linha user prevalece. Defina a senha pelo próprio Redis:

REDIS_PASS=$(openssl rand -hex 24)
echo "$REDIS_PASS"
redis-cli CONFIG SET requirepass "$REDIS_PASS"
REDISCLI_AUTH="$REDIS_PASS" redis-cli CONFIG REWRITE

Guarde a senha num lugar seguro. Agora o Redis a armazena como hash SHA-256 nessa mesma linha user default. Depois de um reinício, redis-cli ping respondeu NOAUTH Authentication required. e só a senha funcionava. Passe-a ao redis-cli pela variável REDISCLI_AUTH. Com -a ela aparece na lista de processos, e o redis-cli avisa sobre isso. Na sua aplicação, coloque-a na URL do Redis: redis://:PASSWORD@127.0.0.1:6379/0.

5. Acessar do seu computador

Deixe o Redis em 127.0.0.1 e use um túnel SSH. Use a porta SSH do seu servidor, que nos planos com NAT é a sua porta pessoal:

ssh -N -L 6380:127.0.0.1:6379 deploy@YOUR_SERVER_IP -p 22

Enquanto isso estiver rodando, redis-cli -p 6380 e as ferramentas de desktop do seu computador falam com o Redis do servidor. Nada novo fica aberto para a internet. Com o guia de chaves SSH, o túnel entra sem senha.

Qual a velocidade

No servidor de teste Micro, o redis-benchmark com 50 clientes nos deu:

TesteRequisições por segundoLatência mediana
SET30.3031,0 ms
GET35.1490,9 ms
SET, 16 comandos por ida e volta272.1092,4 ms
GET, 16 comandos por ida e volta414.9381,3 ms

Para o cache ou a fila de tarefas de uma aplicação web, é muito mais do que você vai precisar. A velocidade extra vem de enviar comandos em lotes (pipelining).

Qual plano escolher

O Redis precisa de RAM para os seus dados e de pouco mais. O Nano (2 vCPU, 1 GB, $3/mês) roda o Redis ao lado de uma aplicação pequena com maxmemory 256mb. O Micro (2 GB, $5/mês) deixa espaço para um cache maior e a aplicação. Se outra coisa precisa se conectar diretamente ao Redis, use o seu próprio IPv4 (a partir do Nano-IP por $8/mês) e libere no firewall apenas esse endereço. Todos os planos estão na página de VPS, e o pagamento é em USDT, USDC ou ETH nas redes Base, Ethereum ou Polygon.

Perguntas frequentes

Quanta RAM o Redis precisa?

O Redis em si é minúsculo: 13,5 MB logo após a instalação no nosso servidor. O que ele precisa é de espaço para os seus dados, que ficam na memória. Defina maxmemory conforme o que o servidor pode ceder, por exemplo 256 MB num servidor de 1 GB, e escolha o que acontece quando encher.

Redis ou Valkey?

O Valkey é um fork do Redis que partiu do Redis 7.2 e usa o mesmo protocolo, então a maioria dos clientes funciona com os dois. O Ubuntu 24.04 só traz o Redis 7.0.15. O Debian 13 tem Redis 8.0 e Valkey 8.1, e o Debian 12 recebe o Valkey 8.0 pelos backports. Os passos deste guia valem para ambos.

Por que o Redis perde dados depois de uma falha?

Por padrão, o Redis salva um snapshot no disco a cada poucos minutos, conforme quantas chaves mudaram. Quando matamos o processo, a chave gravada depois do último snapshot tinha sumido. Ative o arquivo AOF, que grava a cada segundo, e uma falha custará no máximo cerca de um segundo de gravações.

Adicionei requirepass ao redis.conf, por que o Redis ainda aceita comandos sem senha?

Provavelmente porque o CONFIG REWRITE foi executado em algum momento. No Redis 7, ele acrescenta a linha user default on nopass ~* &* +@all no fim do redis.conf, e essa linha anula um requirepass colocado mais acima. Defina a senha com CONFIG SET requirepass e depois CONFIG REWRITE, e o Redis a guarda nessa linha.

Posso abrir a porta 6379 para a internet?

Não abra. Portas do Redis abertas são escaneadas o tempo todo e são uma porta de entrada comum em servidores. Acesse o Redis do seu computador por um túnel SSH, ou mantenha-o no mesmo servidor que a aplicação que o usa.

Comentários

Nenhum comentário ainda. Seja o primeiro.

Deixe um comentário

Os comentários são moderados antes de aparecerem.