Comparando as principais soluções do mercado
Redis vs KeyDB
Explore o KeyDB como fork multi-thread do Redis com suporte a Active Replication, comparando performance, compatibilidade e casos de uso.
Nesta aula você vai
- Entender a proposta do KeyDB como Redis multi-thread com Active Replication
- Comparar arquitetura, performance e compatibilidade com Redis
- Avaliar cenários de adoção e limitações em relação ao ecossistema Redis
Redis vs KeyDB
Objetivos
Nesta aula você vai:
- Conhecer o KeyDB e sua relação histórica com o Redis
- Entender Active Replication e multithreading como diferenciais
- Decidir quando KeyDB é alternativa viável ao Redis tradicional
Conteúdo
O irmão que corre em paralelo
Na família dos bancos em memória compatíveis com Redis, o KeyDB é o irmão que decidiu que um único thread não bastava. Criado pela EQ Alpha Ltd., o KeyDB partiu do código-fonte Redis e adicionou multithreading real e Active Replication — permitindo que múltiplos nós aceitem escritas simultaneamente.
É uma narrativa familiar no ecossistema: assim como Valkey e DragonflyDB, o KeyDB questiona limitações arquiteturais do Redis original. Cada solução, porém, traz sua própria combinação de trade-offs.
O que o KeyDB adiciona ao Redis
| Recurso | Redis | KeyDB |
|---|---|---|
| Threading de comandos | Single-thread | Multi-thread (configurável) |
| Replicação | Master-replica (unidirecional) | Active Replication (multi-master) |
| Protocolo RESP | Nativo | Compatível (fork Redis) |
| FLASH storage | Não | Suporte experimental a tiered storage |
| Licença | RSALv2/SSPL (7.4+) | BSD-3-Clause |
Multithreading: como funciona
KeyDB distribui comandos entre threads de worker, similar em espírito ao DragonflyDB, mas com abordagem diferente — mantendo maior compatibilidade com o código-base Redis:
┌─────────────────────────────────────────┐
│ KeyDB │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │Worker 1 │ │Worker 2 │ │Worker N │ │
│ │ keys A-M│ │ keys N-Z│ │ ... │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ ▲ ▲ ▲ │
│ └───────────┴───────────┘ │
│ Dispatcher de conexões │
└─────────────────────────────────────────┘
Configuração do número de threads:
# keydb.conf
server-threads 4
# Ou via linha de comando
keydb-server --server-threads 4 --port 6379
Teste com redis-cli (protocolo compatível):
redis-cli -h keydb.local -p 6379
# Comandos idênticos ao Redis
SET contador:visitas 0
INCR contador:visitas
GET contador:visitas
# Pipeline para testar throughput multi-thread
redis-cli --pipe < commands.txt
Active Replication: múltiplos mestres
No Redis tradicional, apenas o master aceita escritas; replicas são read-only. KeyDB introduz Active Replication: dois ou mais nós aceitam escritas e sincronizam bidirecionalmente.
┌──────────┐ Active Repl. ┌──────────┐
│ KeyDB A │◄────────────────────►│ KeyDB B │
│ (writes) │ │ (writes) │
└──────────┘ └──────────┘
▲ ▲
│ Aplicações │
└──────────────┬───────────────────┘
│
Load Balancer
Vantagem: elimina o master único como ponto de contenção de escrita.
Risco: conflitos de escrita na mesma chave entre nós — exige disciplina da aplicação (chaves por região, ou aceitar last-write-wins).
Configuração:
# Nó A
keydb-server --port 6379 --active-replica yes --replicaof keydb-b 6379
# Nó B
keydb-server --port 6379 --active-replica yes --replicaof keydb-a 6379
Performance comparativa
| Métrica | Redis 7.2 (1 thread) | KeyDB (4 threads) | KeyDB (8 threads) |
|---|---|---|---|
| SET ops/s | ~100.000 | ~320.000 | ~480.000 |
| GET ops/s | ~120.000 | ~400.000 | ~600.000 |
| P50 latência | ~0,3 ms | ~0,2 ms | ~0,15 ms |
| P99 latência | ~1,5 ms | ~1,0 ms | ~0,8 ms |
Hardware: 8 cores, 32 GB RAM, valores de 256 bytes. Benchmark com redis-benchmark.
# Benchmark KeyDB
redis-benchmark -h keydb.local -p 6379 -t set,get -n 500000 -c 50 -q
Ganhos são proporcionais ao número de cores e ao ratio de leitura/escrita. Workloads com Lua scripts complexos ou transações MULTI/EXEC podem não escalar linearmente.
Compatibilidade com ecossistema Redis
KeyDB mantém compatibilidade com a maioria dos comandos Redis e funciona com clientes padrão:
| Componente | Compatibilidade |
|---|---|
| redis-cli | Total |
| Jedis / Lettuce / ioredis | Total (protocolo RESP) |
| redis_exporter (Prometheus) | Parcial (métricas adaptadas) |
| Redis Modules | Limitada |
| Redis Cluster | Não — usa Active Replication |
| Redis Sentinel | Suportado |
KeyDB vs DragonflyDB vs Valkey
| Aspecto | KeyDB | DragonflyDB | Valkey |
|---|---|---|---|
| Origem | Fork Redis | Reimplementação | Fork Redis |
| Multi-thread | Sim | Sim | I/O threads |
| Active Replication | Sim (diferencial) | Não | Não |
| Licença | BSD-3-Clause | BSL 1.1 | BSD-3-Clause |
| Maturidade | Média | Média | Alta (comunidade LF) |
| FLASH/tiered storage | Experimental | Não | Não |
Quando escolher KeyDB
- Precisa de multi-master com escritas em múltiplos nós
- Servidor multi-core com Redis single-thread saturado
- Migração de Redis com mínima alteração de código e clientes
- Licença BSD é requisito e Valkey não atende necessidade de Active Replication
Quando evitar KeyDB
- Depende de Redis Cluster para sharding horizontal
- Usa módulos Redis proprietários (RedisJSON, RediSearch)
- Precisa de ecossistema com amplo suporte comercial (Redis Enterprise, Valkey via cloud)
- Workloads com transações complexas em chaves compartilhadas entre nós Active Replication
Operação prática
# Verificar threads ativos
redis-cli INFO server | grep threads
# Monitorar replicação ativa
redis-cli INFO replication
# Verificar latência P99
redis-cli --latency-history -i 1
# Failover manual (promover réplica)
redis-cli REPLICAOF NO ONE
Resumo
- KeyDB é fork BSD do Redis com multithreading real e Active Replication
- Multi-master elimina gargalo de escrita única, mas exige cuidado com conflitos
- Compatível com clientes Redis padrão — migração relativamente simples
- Avalie contra DragonflyDB (throughput) e Valkey (comunidade) conforme prioridades
Para refletir
Active Replication parece resolver o problema do master único. Em um sistema com escritas concorrentes na mesma chave de estoque (produto:1001:qtd), o que poderia dar errado?