Comparando as principais soluções do mercado

Comparativo geral entre todas as soluções

Síntese comparativa de Redis, Valkey, Memcached, DragonflyDB, KeyDB e Aerospike com matriz de decisão, teorema CAP e guia de seleção arquitetural.

Intermediário 35 min 25 pontos Leitura 0%

Nesta aula você vai

  • Consolidar comparativos das aulas anteriores em uma visão unificada
  • Aplicar o teorema CAP para posicionar cada solução
  • Construir matriz de decisão para escolha arquitetural em projetos reais

Comparativo geral entre todas as soluções

Objetivos

Nesta aula você vai:

  • Consolidar o panorama completo das soluções de cache e banco em memória
  • Aplicar o teorema CAP como lente analítica
  • Usar uma matriz de decisão para escolher a ferramenta certa em cada cenário

Conteúdo

O epílogo do módulo comparativo

Depois de examinar cada personagem individualmente — Redis, Valkey, Memcached, DragonflyDB, KeyDB e Aerospike — chegamos ao capítulo final em que todos ocupam o mesmo palco. Como em um romance de ficção científica, cada tecnologia representa uma resposta diferente à pergunta fundamental: o que você sacrifica quando exige velocidade?

Panorama das soluções

Solução Tipo Threading Persistência Licença Maturidade
Redis Estrutura de dados em memória Single-thread + I/O RDB + AOF RSALv2/SSPL ★★★★★
Valkey Fork Redis open source Single-thread + I/O RDB + AOF BSD-3-Clause ★★★★
Memcached Cache chave-valor Multi-thread Nenhuma BSD ★★★★★
DragonflyDB Redis-compatible Multi-thread nativo Snapshot BSL → Apache ★★★
KeyDB Fork Redis multi-thread Multi-thread RDB + AOF BSD-3-Clause ★★★
Aerospike Banco NoSQL híbrido Multi-thread SSD nativo AGPL/Enterprise ★★★★

O teorema CAP aplicado

O teorema CAP (Brewer) afirma que um sistema distribuído só pode garantir simultaneamente duas de três propriedades:

  • Consistency (Consistência) — todos os nós veem os mesmos dados ao mesmo tempo
  • Availability (Disponibilidade) — toda requisição recebe resposta (não erro)
  • Partition tolerance (Tolerância a partição) — sistema funciona mesmo com falha de rede entre nós

Em sistemas distribuídos reais (com partição de rede inevitável), a escolha é entre CP e AP:

                    Consistência (C)
                         ▲
                         │
              Aerospike  │  Redis/Valkey
              (sync rep) │  (sync rep)
                         │
    Partition ───────────┼─────────── Disponibilidade (A)
    Tolerance (P)        │
                         │
              AP systems │  Memcached
              (eventual) │  (sem replicação nativa)
                         │
                         ▼
Solução Tendência CAP Comportamento em partição
Redis/Valkey (repl. sync) CP Pode recusar escritas se quorum indisponível
Memcached AP (sem repl.) Nó isolado continua servindo cache local
KeyDB (Active Replication) AP Last-write-wins em conflito
DragonflyDB CP (single node) / em evolução Depende da topologia
Aerospike (repl. sync) CP Escrita falha se réplica indisponível (configurável)

Nota pedagógica: CAP é modelo de pensamento, não receita de bololo. Na prática, sistemas modernos oferecem níveis configuráveis de consistência (ex.: Redis WAIT, Aerospike strong vs eventual).

Matriz de decisão por caso de uso

Caso de uso 1ª escolha 2ª escolha Evitar
Cache HTTP simples Memcached Redis Aerospike
Sessão de usuário Redis/Valkey KeyDB Memcached (sem estruturas)
Rate limiting Redis/Valkey DragonflyDB Memcached
Leaderboard Redis (Sorted Set) Memcached
Pub/Sub efêmero Redis Memcached
Fila leve (jobs) Redis (LIST/Stream) Memcached
Cache + persistência Redis/Valkey KeyDB Memcached
Throughput extremo (1 nó) DragonflyDB KeyDB Redis single-thread
Multi-master writes KeyDB Redis tradicional
Dados > RAM (TB) Aerospike Redis puro
Perfis em escala (100M+) Aerospike Redis Cluster Memcached
Licença BSD estrita Valkey/KeyDB Memcached Redis 7.4+
Ecossistema maduro Redis/Valkey Memcached DragonflyDB

Comparativo de performance (referência)

Valores ilustrativos em servidor 16 cores, 64 GB RAM, valores de 256 bytes:

Solução GET ops/s SET ops/s P50 P99
Memcached ~250.000 ~200.000 0,1 ms 0,5 ms
Redis 7.2 ~120.000 ~100.000 0,3 ms 1,5 ms
Valkey 8.0 ~125.000 ~105.000 0,3 ms 1,2 ms
KeyDB (8 threads) ~500.000 ~400.000 0,15 ms 0,8 ms
DragonflyDB ~1.200.000 ~1.000.000 0,1 ms 0,6 ms
Aerospike ~300.000 ~250.000 0,5 ms 3 ms

Aerospike inclui persistência SSD. Redis com AOF everysec. Sempre benchmark no seu ambiente.

# Script de benchmark comparativo (executar contra cada instância)
for host in redis valkey keydb dragonfly memcached; do
  echo "=== $host ==="
  redis-benchmark -h $host -p 6379 -t get,set -n 100000 -q
  redis-cli -h $host --latency-history -i 1 | head -5
done

Comparativo de latência por percentil

Entender percentis é essencial para SLAs de produção:

Percentil O que mede Por que importa
P50 (mediana) Experiência típica Baseline de performance
P95 5% mais lento Usuários afetados em picos moderados
P99 1% mais lento "Cauda longa" — onde incidentes nascem
P99.9 0,1% mais lento Outliers extremos — SLA crítico
Distribuição de latência (ilustrativa):

Frequência
    ▲
    │  ████
    │  ████████
    │  ████████████
    │  ████████████████▓▓▓▓░░  ← cauda longa (P99+)
    └──────────────────────────► Latência
         P50  P95  P99  P99.9

Regra de ouro: otimize para P99, não para média. Um P50 de 0,2 ms com P99 de 50 ms indica problema (GC, persistência, rede) — não excelência.

Comparativo de custo operacional

Fator Memcached Redis/Valkey DragonflyDB/KeyDB Aerospike
Complexidade de deploy Baixa Média Média Alta
Curva de aprendizado Baixa Média Média Alta
Monitoramento Básico Rico (INFO, SLOWLOG) Compatível Redis Métricas próprias
Backup/restore Desnecessário RDB/AOF Snapshot SSD nativo
Scaling horizontal Client-side Redis Cluster Limitado Automático
Custo de RAM Alto (tudo em RAM) Alto Alto Médio (híbrido)

Árvore de decisão

Precisa de cache?
├── Sim → Dados cabem em RAM?
│   ├── Sim → Precisa de estruturas ricas (hash, sorted set)?
│   │   ├── Sim → Precisa multi-thread?
│   │   │   ├── Sim → DragonflyDB ou KeyDB
│   │   │   └── Não → Redis ou Valkey
│   │   └── Não → Memcached
│   └── Não → Aerospike
└── Não → Considere PostgreSQL, Kafka, etc.

Coexistência: arquitetura políglota de dados

Sistemas maduros raramente escolhem uma única solução:

┌─────────────────────────────────────────────────────────┐
│                    Camada de Aplicação                   │
├──────────┬──────────┬──────────┬──────────┬─────────────┤
│Memcached │  Redis   │ KeyDB/   │Aerospike │ PostgreSQL  │
│ Cache    │ Sessão + │Dragonfly │ Perfis + │ Pedidos +   │
│ de página│ Rate Lim │(through) │ Inventár.│ Relatórios  │
└──────────┴──────────┴──────────┴──────────┴─────────────┘

Cada ferramenta resolve um capítulo do enredo — não tente escrever o livro inteiro com um único personagem.

Checklist de seleção

Antes de decidir, responda:

  1. Volume de dados — cabe em RAM? (< 100 GB → Redis; > 500 GB → Aerospike)
  2. Padrão de acesso — chave-valor simples ou estruturas ricas?
  3. Durabilidade — perda de dados é aceitável? (sim → Memcached; não → Redis/Aerospike)
  4. Throughput — quantas ops/s? (> 500k em 1 nó → DragonflyDB/KeyDB)
  5. Consistência — CP ou AP? (financeiro → CP; cache → AP)
  6. Licença — BSD obrigatório? (Valkey, KeyDB, Memcached)
  7. Equipe — experiência existente com qual ferramenta?
  8. SLA de latência — qual P99 é aceitável?

Resumo

  • Não existe "melhor" solução universal — existe a melhor para cada contexto
  • CAP ajuda a posicionar trade-offs: CP (Redis, Aerospike) vs AP (Memcached, KeyDB active)
  • Otimize decisões por P99, não por ops/s de marketing
  • Arquiteturas maduras combinam múltiplas ferramentas — poliglotismo é força, não fraqueza

Para refletir

"O arquiteto não escolhe a ferramenta mais rápida — escolhe a que o time opera bem, o negócio tolera e o orçamento sustenta."

Desenhe a arquitetura de cache de um SaaS com 10.000 clientes, 50 GB de sessões e 200 GB de perfis: quais soluções você combinaria?