Implementar cache distribuido com Redis e uma das maneiras mais eficientes de acelerar aplicacoes que precisam lidar com alta concorrencia. Ao final deste guia, voce tera um cache distribuido funcional, com dados replicados entre nos e pronto para uso em producao. Antes de comecar, certifique-se de ter: um servidor Linux (Ubuntu 22.04 ou similar), acesso root ou sudo, e o .NET SDK 8+ instalado (se for usar ASP.NET Core).
Passo 1: Instalar e configurar o Redis
Acesse o servidor via SSH e execute os comandos de instalacao do Redis. No Ubuntu, use sudo apt update && sudo apt install redis-server. Apos a instalacao, edite o arquivo de configuracao /etc/redis/redis.conf. Altere bind 127.0.0.1 para o IP do servidor (ex.: bind 192.168.1.100) e defina uma senha forte em requirepass. Isso impede acesso externo nao autorizado. Dica: nunca use a configuracao padrao em producao, o Redis sem senha e um convite para ataques. Um erro comum e esquecer de liberar a porta 6379 no firewall; verifique com sudo ufw allow 6379.
Passo 2: Configurar o cluster Redis (modo distribuido)
Para cache distribuido de verdade, voce precisa de multiplos nos Redis. Crie um arquivo redis-cluster.conf em cada no, com port 7000, cluster-enabled yes, cluster-config-file nodes.conf e cluster-node-timeout 5000. Inicie cada no com redis-server ./redis-cluster.conf. Depois, use o utilitario redis-cli para criar o cluster: redis-cli --cluster create 192.168.1.100:7000 192.168.1.101:7000 192.168.1.102:7000 --cluster-replicas 1. Esse comando distribui dados entre tres nos primarios e tres replicas. Dica: para testar localmente, use maquinas virtuais ou containers Docker, o docker-compose com servico Redis e mais simples que configurar manualmente.
Passo 3: Conectar a aplicacao ao Redis
No ASP.NET Core, instale o pacote NuGet Microsoft.Extensions.Caching.StackExchangeRedis. No Program.cs, adicione builder.Services.AddStackExchangeRedisCache(options => { options.Configuration = "192.168.1.100:7000,password=sua_senha"; options.InstanceName = "meuCache"; });. Agora, injete IDistributedCache nos seus controllers ou servicos. Para armazenar um dado, use await cache.SetStringAsync("chave", "valor", new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10) });. Erro comum: esquecer de tratar expiracao, dados sem expiracao acumulam memoria e degradam performance. Defina sempre um AbsoluteExpiration ou SlidingExpiration.
Passo 4: Testar e monitorar o cache
Apos configurar, teste com uma requisicao a aplicacao. Use comandos redis-cli para verificar as chaves: redis-cli -h 192.168.1.100 -p 7000 -a sua_senha KEYS *. Monitore a latencia com redis-cli --latency -h 192.168.1.100 -p 7000. Para producao, configure ferramentas como RedisInsight ou Prometheus com o exporter Redis. Dica: fique de olho na memoria usada (INFO memory), se ultrapassar 80% da RAM disponivel, aumente o numero de nos ou reduza o TTL das chaves.
Checklist do que foi feito
- [ ] Redis instalado e configurado com senha e bind correto
- [ ] Cluster Redis criado com nos primarios e replicas
- [ ] Aplicacao conectada via
StackExchange.Rediscom tratamento de expiracao - [ ] Teste de leitura/escrita e monitoramento basico configurado
FAQ
O cache distribuido com Redis funciona em Windows?
Sim, mas o suporte oficial e limitado. O Redis no Windows e considerado experimental pela comunidade. Para producao, prefira Linux ou use o Redis Cloud (como Azure Cache for Redis), que oferece compatibilidade total.
Qual a diferenca entre cache local e distribuido com Redis?
Cache local (in-memory) fica em um unico servidor e e perdido se a aplicacao reiniciar. O Redis distribuido armazena dados em varios nos, garantindo persistencia e disponibilidade mesmo com falha de um servidor.
Preciso configurar persistencia no Redis para cache?
Nao e obrigatorio. Cache geralmente usa dados temporarios, entao a configuracao padrao (sem persistencia) e suficiente. Se quiser evitar perda em reinicializacoes, ative RDB (snapshots) ou AOF (append-only file) nas configuracoes.
Como lidar com a expiracao de chaves no Redis?
Defina AbsoluteExpirationRelativeToNow para expirar apos um tempo fixo, ou SlidingExpiration para renovar a cada acesso. Use valores entre 5 e 30 minutos para dados de API; para dados estaticos, ate 1 hora.
O que fazer se o Redis ficar lento?
Verifique o uso de memoria com INFO memory. Se estiver alta, aumente o numero de nos ou reduza o TTL. Monitore tambem comandos lentos com SLOWLOG GET 10 e evite chaves muito grandes (acima de 10 MB).