Valkey: o fork do Redis que você precisa conhecer

1. O contexto do fork: por que o Valkey surgiu?

Em março de 2024, a Redis Labs anunciou a mudança de licenciamento do Redis de BSD para uma licença dupla (RSALv2 e SSPL), efetivamente tornando o Redis não mais um software open-source no sentido tradicional. Essa decisão gerou controvérsia na comunidade, especialmente entre provedores de nuvem e empresas que dependiam do Redis como componente central de suas infraestruturas.

Em resposta, a Linux Foundation anunciou o fork do projeto sob o nome Valkey. O objetivo principal era claro: manter o Redis verdadeiramente open-source, com governança neutra e participação da comunidade. Empresas como AWS, Google Cloud, Oracle e Ericsson apoiaram publicamente o fork, contribuindo com mantenedores e recursos.

O Valkey nasceu com três objetivos fundamentais:
- Manter compatibilidade total com o ecossistema Redis existente
- Evoluir o projeto com governança aberta e transparente
- Garantir liberdade de uso para todos, sem restrições de licenciamento

2. Instalação e primeiros passos com Valkey

A instalação do Valkey é simples e pode ser feita de várias formas. A maneira mais rápida é via Docker:

docker run -d --name valkey-server -p 6379:6379 valkey/valkey:7.2

Para instalação nativa no Ubuntu/Debian:

sudo apt update
sudo apt install valkey-server valkey-cli

No CentOS/RHEL:

sudo yum install valkey-server valkey-cli

Após a instalação, inicie o servidor:

valkey-server /etc/valkey/valkey.conf

Conecte-se usando o cliente:

valkey-cli -h 127.0.0.1 -p 6379

Teste os comandos básicos:

127.0.0.1:6379> SET saudacao "Olá, Valkey!"
OK
127.0.0.1:6379> GET saudacao
"Olá, Valkey!"
127.0.0.1:6379> PING
PONG

A configuração principal fica no arquivo valkey.conf. Para migrar do Redis, basta copiar seu redis.conf e renomear para valkey.conf — a sintaxe é praticamente idêntica.

3. Compatibilidade total com Redis: o que muda (e o que não muda)

O Valkey foi projetado para ser 100% compatível com o Redis. Isso significa que:

  • Protocolos: Suporta RESP2 e RESP3
  • Comandos: Todos os comandos Redis funcionam no Valkey
  • Estruturas de dados: Strings, hashes, listas, sets, sorted sets, streams, HyperLogLog, Bitmaps, Geospatial
  • Clientes: Bibliotecas como ioredis (Node.js), redis-py (Python), jedis (Java) funcionam sem alterações

Exemplo com Python usando redis-py:

import redis

r = redis.Redis(host='localhost', port=6379, decode_responses=True)
r.set('chave', 'valor')
print(r.get('chave'))  # Saída: valor

Exemplo com Node.js usando ioredis:

const Redis = require('ioredis');
const redis = new Redis();

redis.set('chave', 'valor').then(() => {
    redis.get('chave').then(result => console.log(result));
});

A única diferença perceptível é o nome do binário: valkey-server e valkey-cli no lugar de redis-server e redis-cli.

4. Novidades e diferenciais do Valkey em relação ao Redis

O Valkey já introduz melhorias significativas em relação ao Redis original:

Multithreading otimizado

O Redis sempre foi single-threaded para operações de dados. O Valkey possui melhorias no suporte a threads para operações de E/S e tarefas administrativas, resultando em maior throughput em servidores multi-core.

Otimizações de memória

O Valkey implementa melhorias no gerenciamento de memória, reduzindo o overhead em estruturas de dados grandes. Testes internos mostram economia de 10-15% em cenários de alta carga.

Novos comandos da comunidade

Comunidade ativa já propõe novos comandos, como JSON.SETPATH, FT.AGGREGATE aprimorado e melhorias no módulo de streams.

Governança aberta

Diferente do Redis, onde as decisões são centralizadas na Redis Labs, o Valkey tem um comitê técnico eleito pela comunidade e roadmap definido publicamente no GitHub.

5. Casos de uso práticos: substituindo Redis por Valkey

Cache de sessão com fallback zero

Configuração básica para cache:

# valkey.conf
maxmemory 256mb
maxmemory-policy allkeys-lru
save 900 1
save 300 10
save 60 10000

Aplicação em Node.js:

const session = require('express-session');
const RedisStore = require('connect-redis')(session);
const Redis = require('ioredis');

const client = new Redis({
    host: 'localhost',
    port: 6379,
    retryStrategy: (times) => Math.min(times * 50, 2000)
});

app.use(session({
    store: new RedisStore({ client }),
    secret: 'seu-segredo',
    resave: false,
    saveUninitialized: false
}));

Filas de mensagens com pub/sub

# Produtor
valkey-cli PUBLISH canal "Mensagem importante"

# Consumidor (em terminal separado)
valkey-cli SUBSCRIBE canal

Migração de Redis para Valkey

Passo a passo para migração com zero downtime:

# 1. Fazer dump do Redis
redis-cli SAVE

# 2. Copiar dump.rdb para o Valkey
cp /var/lib/redis/dump.rdb /var/lib/valkey/dump.rdb

# 3. Iniciar Valkey
valkey-server /etc/valkey/valkey.conf

# 4. Testar dados
valkey-cli KEYS "*"

# 5. Redirecionar aplicações para nova porta (ou manter mesma porta)

6. Monitoramento, backup e operações no dia a dia

Monitoramento com Prometheus

Instale o exportador Valkey:

docker run -d --name valkey-exporter \
  -p 9121:9121 \
  oliver006/redis_exporter \
  -redis.addr redis://localhost:6379

Configure no Prometheus:

scrape_configs:
  - job_name: 'valkey'
    static_configs:
      - targets: ['localhost:9121']

Backup com RDB e AOF

Agende backups automáticos:

# /etc/cron.d/valkey-backup
0 3 * * * root valkey-cli BGSAVE
0 4 * * * root cp /var/lib/valkey/dump.rdb /backup/valkey-$(date +\%Y\%m\%d).rdb

Health checks

# Script simples de health check
#!/bin/bash
if valkey-cli PING > /dev/null 2>&1; then
    echo "Valkey está saudável"
    exit 0
else
    echo "Valkey não responde"
    exit 1
fi

7. O futuro do Valkey e da ecossistema de bancos in-memory

O roadmap do Valkey inclui:

  • Suporte nativo a JSON com índices secundários
  • Melhorias no cluster para escalabilidade horizontal
  • Integração com Vector Similarity Search para aplicações de IA
  • Suporte a múltiplos bancos de dados com isolamento total

Grandes players já adotaram o Valkey:
- AWS: Oferece Valkey como serviço gerenciado (Amazon MemoryDB for Valkey)
- Google Cloud: Suporte nativo no Memorystore
- Oracle: Integração com MySQL HeatWave

Para decidir entre Valkey, Redis (licenciado) e alternativas como Dragonfly ou KeyDB, considere:
- Valkey: Se você valoriza open-source real e governança comunitária
- Redis: Se precisa de suporte comercial oficial da Redis Labs
- Dragonfly: Se busca desempenho extremo em ambientes multi-core
- KeyDB: Se precisa de multithreading nativo e compatibilidade com Redis

O Valkey representa o futuro do Redis original: uma ferramenta livre, aberta e mantida pela comunidade. Se você já usa Redis, a migração é trivial. Se está começando, comece com Valkey — você não perderá nada e ganhará um ecossistema verdadeiramente aberto.

Referências