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 comOOM 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 parou | Só snapshots (padrão) | Com o arquivo AOF |
|---|---|---|
systemctl restart | Nada perdido: ele salva ao desligar | Nada perdido |
Morto com kill -9 | A chave gravada após o último snapshot sumiu | Uma 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:
| Teste | Requisições por segundo | Latência mediana |
|---|---|---|
| SET | 30.303 | 1,0 ms |
| GET | 35.149 | 0,9 ms |
| SET, 16 comandos por ida e volta | 272.109 | 2,4 ms |
| GET, 16 comandos por ida e volta | 414.938 | 1,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.
Comentários
Nenhum comentário ainda. Seja o primeiro.