Introdução
Redis é um armazenamento de estrutura de dados em memória, frequentemente utilizado como banco de dados, cache e agente de mensagens. Seu modelo de dados chave-valor permite operações com tempo de execução extremamente baixo.
Instalação e Configuração Inicial
Para compilar e instalar o Redis a partir do código-fonte, siga um processo semelhante ao descrito abaixo. As versões e diretórios podem ser ajustados conforme necessário.
#!/bin/bash
# Script simplificado para instalação do Redis
VERSION="redis-7.2.4"
URL="https://download.redis.io/releases/${VERSION}.tar.gz"
INSTALL_PREFIX="/opt/redis"
REDIS_PASS="senha_segura_123"
# Baixar e extrair
wget ${URL}
tar -xzf ${VERSION}.tar.gz
cd ${VERSION}
# Compilar e instalar
make
make PREFIX=${INSTALL_PREFIX} install
# Criar diretórios de configuração e dados
mkdir -p ${INSTALL_PREFIX}/{etc,data,log,run}
# Copiar configuração padrão
cp redis.conf ${INSTALL_PREFIX}/etc/redis.conf
# Ajustes básicos no arquivo de configuração
sed -i "s|^bind .*|bind 0.0.0.0|" ${INSTALL_PREFIX}/etc/redis.conf
sed -i "s|^# requirepass .*|requirepass ${REDIS_PASS}|" ${INSTALL_PREFIX}/etc/redis.conf
sed -i "s|^dir .*|dir ${INSTALL_PREFIX}/data|" ${INSTALL_PREFIX}/etc/redis.conf
Após a instalação, configure um serviço systemd para gerenciar o processo do Redis.
# /etc/systemd/system/redis.service
[Unit]
Description=Serviço Redis Key-Value Store
After=network.target
[Service]
User=redis
Group=redis
ExecStart=/opt/redis/bin/redis-server /opt/redis/etc/redis.conf --supervised systemd
ExecStop=/opt/redis/bin/redis-cli -a senha_segura_123 shutdown
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
Gerenciamento de Configuração
As configurações principais do Redis residem no arquivo redis.conf. Parâmetros importantes incluem:
- bind: Define quais andereços IP escutar.
- protected-mode: Modo de segurança ativado por padrão.
- maxmemory: Limite de memória para o servidor. Use
CONFIG SETpara alterar em runtime.
Exemplo de alteração dinâmica:
redis-cli -a senha_segura_123 CONFIG SET maxmemory 1gb
Persistência de Dados
O Redis oferece dois mecanismos principais de persistência:
RDB (Snapshot)
Cria um ponto de recuperação completo em um momento específico. Configure a política de salvamento automático:
# Salva se houver pelo menos 1 alteração de chave em 900 segundos
save 900 1
# Salva se houver pelo menos 10 alterações em 300 segundos
save 300 10
AOF (Append-Only File)
Registra cada operação de escrita recebida pelo servidor. Para ativar:
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec # Sincroniza a cada segundo
Uma abordagem híbrida (RDB + AOF) pode oferecer o melhor dos dois mundos em termos de velocidade de recuperação e integridade dos dados.
Estruturas de Dados e Comandos
Strings
# Definir e obter
SET username "joao_silva"
GET username
# Incremento atômico
INCR page_views
INCRBY user:123:score 50
# Definir com expiração (TTL)
SETEX session_token 3600 "valor_da_sessao"
Listas
Listas ordenadas de elemnetos.
LPUSH task_queue "tarefa_1" "tarefa_2"
RPOP task_queue # Remove a primeira tarefa inserida (LIFO) ou use LPOP para FIFO
LRANGE task_queue 0 -1 # Listar todos os elementos
Sets
Coleções não ordenadas e únicas.
SADD user:100:tags "python" "redis" "backend"
SISMEMBER user:100:tags "redis" # Verifica se o membro existe
SINTER tag:redis:users tag:python:users # Interseção entre conjuntos
Sorted Sets
Sets onde cada membro tem uma pontuação associada para ordenação.
ZADD ranking 1500 "jogador_a" 2100 "jogador_b"
ZRANGE ranking 0 -1 WITHSCORES # Do menor para o maior score
ZREVRANGE ranking 0 9 # Top 10, do maior para o menor
Hashes
Mapas de campos-valor, ideais para representar objetos.
HSET user:100 name "Maria" email "maria@exemplo.com" age 30
HGET user:100 email
HGETALL user:100 # Obter todos os campos e valores
Alta Disponibilidade e Escalabilidade
Replicação Mestre-Escravo
Configure nós escravos para replicar dados do mestre e fornecer leitura escalonada.
# No arquivo de configuração do nó escravo (redis.conf)
replicaof <ip_do_mestre> <porta_do_mestre>
masterauth "senha_do_mestre"
</porta_do_mestre></ip_do_mestre>
Sentinel
Sistema de monitoramento e failover automático que gerencia um conjunto de instâncias Redis.
# Exemplo de configuração do sentinel.conf
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel auth-pass mymaster "senha_do_mestre"
sentinel down-after-milliseconds mymaster 5000
Cluster
Implementação de sharding (particionamento) automático que permite distribuir dados através de múltiplos nós.
Para criar um cluster de teste com 6 nós (3 primários, 3 réplicas):
redis-cli --cluster create \
192.168.1.101:6379 192.168.1.102:6379 192.168.1.103:6379 \
192.168.1.104:6379 192.168.1.105:6379 192.168.1.106:6379 \
--cluster-replicas 1
Os dados são distribuídos automaticamente entre os nós primários usando 16384 slots hash.