Evolução da Arquitetura de Dados
A camada de acesso a dados (Data Access Layer - DAL) evoluiu drasticamente para suportar o crescimento das aplicações modernas. Inicialmente, o uso direto de JDBC ou frameworks ORM acoplados supria as necessidades de persistência em bancos relacionais como o MySQL, que suporta cerca de 5 milhões de registros por tabela sem degradação crítica de performance. No entanto, o cenário atual exige arquiteturas distribuídas, utilizando balanceadores de carga como Nginx, clusters de servidores de aplicação e bancos de dados replicados para garantir alta disponibilidade.
O Ecossistema NoSQL
Bancos de dados NoSQL surgiram para resolver problemas de escalabilidade e velocidade que sistemas relacionais tradicionais não conseguem atender com eficiência. O Redis, por exemplo, é capaz de realizar aproximadamente 80.000 operações de escrita e 110.000 de leitura por segundo.
No contexto NoSQL, é fundamental compreender o Teorema CAP:
- C (Consistência): Todos os nós veem os mesmos dados ao mesmo tempo.
- A (Disponibilidade): Garantia de que todas as requisições recebam uma resposta.
- P (Tolerância a Partição): O sistema continua operando apesar de falhas de comunicação entre nós.
Frequentemente, em sistemas de alta concorrência, sacrifica-se a consistência forte em favor da disponibilidade e tolerância a falhas, adotando o modelo BASE (Basically Available, Soft state, Eventual consistency).
Fundamentos do Redis
O Redis destaca-se como um armazenamento de estrutura de dados em memória, frequentemente utilizado como banco de dados, cache e message broker. Diferente do Memcached, ele suporta uma vasta gama de tipos de dados e persistência em disco.
Instalação e Configuração Inicial
O processo de compilação e instalação em ambientes Unix segue o padrão de ferramentas GNU:
# Extração e compilação
tar -xvf redis-6.2.6.tar.gz
cd redis-6.2.6
make
sudo make install
# Organização de diretórios sugerida
mkdir /etc/redis_config
cp redis.conf /etc/redis_config/instancia_6379.conf
Inicialização do Servidor
Para iniciar o serviço utilizando um arquivo de configuração customizado e acessar o CLI:
# Iniciar o servidor em background
redis-server /etc/redis_config/instancia_6379.conf
# Acessar a interface de linha de comando
redis-cli -p 6379
# No CLI, use 'ping' para testar a conexão (deve retornar 'PONG')
Manipulação de Estruturas de Dados
O Redis opera com um modelo de processo único utilizando multiplexação de I/O (epoll). Por padrão, oferece 16 bancos de dados (indexados de 0 a 15).
Operações Básicas de Chaves (Keys)
EXISTS usuario:101 # Verifica existência
EXPIRE sessao:token 3600 # Define expiração em segundos
TTL sessao:token # Consulta tempo restante de vida
DBSIZE # Quantidade de chaves no banco atual
SELECT 1 # Alterna para o banco de dados 1
FLUSHDB # Remove todas as chaves do banco atual
Strings e Contadores
SET configuracao:tema "dark"
GET configuracao:tema
APPEND configuracao:tema "_v2"
INCR sistema:contador_acessos
INCRBY sistema:vendas 5
SETEX codigo:verificacao 60 "9988" # Set com expiração atômica
Listas (Lists)
Ideais para filas ou logs de atividades recentes.
LPUSH fila:tarefas "email_boas_vindas"
RPUSH fila:tarefas "processar_imagem"
LRANGE fila:tarefas 0 -1 # Lista todos os elementos
LPOP fila:tarefas # Remove o primeiro elemento
Hashes (Dicionários)
Perfeitos para represantar objetos como perfis de usuários.
HSET perfil:1 user "admin" email "admin@tech.com"
HGET perfil:1 email
HMGET perfil:1 user email
HKEYS perfil:1 # Retorna todos os campos
Conjuntos Ordenados (Sorted Sets)
Utilizados em rankings e tabelas de pontuação.
ZADD ranking:jogadores 1500 "player_1"
ZADD ranking:jogadores 2200 "player_2"
ZREVRANGE ranking:jogadores 0 2 WITHSCORES # Top 3 jogadores
Persistência e Segurança
O Redis oferece dois mecanismos principais para garantir que os dados não sejam perdidos em caso de reinicialização:
RDB (Redis Database)
Realiza snapshots do conjunto de dados em intervalos específicos configurados no redis.conf:
save 900 1 # Se 1 chave mudar em 15 min
save 300 10 # Se 10 chaves mudarem em 5 min
save 60 10000 # Se 10.000 chaves mudarem em 1 min
Segurança e Controle de Acesso
A autenticação pode ser configurada dinamicamente ou via arquivo:
# Via CLI para a sessão atual
CONFIG SET requirepass "minha_senha_segura"
AUTH "minha_senha_segura"
# Conexão direta via terminal
redis-cli -a "minha_senha_segura"
Configurações Essenciais de Produção
bind 127.0.0.1: Define as interfaces de rede permitidas.port 6379: Porta padrão de escuta.daemonize yes: Executa o processo em segundo plano.loglevel notice: Nível ideal de detalhamento para logs em produção.maxmemory: Define o limite de RAM que o Redis pode consumir.