Shopping cart

Subtotal $0.00

View cartCheckout

Building better devs

TnewsTnews
  • Home
  • Programação
  • O Criador do Redis Usou IA para Construir o Tipo de Dado que Faltava Há 15 Anos
Programação

O Criador do Redis Usou IA para Construir o Tipo de Dado que Faltava Há 15 Anos

Servidor de banco de dados Redis - array type por antirez
Email : 11

Antirez Voltou ao Redis — e Dessa Vez Trouxe IA

Salvatore Sanfilippo, mais conhecido como antirez, é o tipo de desenvolvedor que criou uma das ferramentas mais usadas do mundo e depois simplesmente… saiu. Em 2020, ele deixou o Redis para se dedicar a projetos pessoais. Seis anos depois, voltou. E o que ele construiu nesses últimos meses mostra que programação de alto nível com assistência de IA não é “vibe coding” — é engenharia de verdade com um copiloto que não reclama de refatorar código às 3 da manhã.

O projeto? Um tipo de dado Array nativo para o Redis. Parece simples, mas se você já trabalhou com Redis sabe que essa lacuna existia desde o primeiro commit do projeto, lá em 2009.

Por Que o Redis Nunca Teve um Array?

Redis sempre teve listas, sets, sorted sets, hashes, streams. Mas um array de verdade — com índice numérico como parte fundamental da semântica — nunca existiu. Listas no Redis são linked lists (ou mais recentemente, listpacks e quicklists). Elas servem bem como filas e pilhas, mas indexação por posição é O(n). Se você quer acessar o elemento 50.000 de uma lista com 100.000 itens, o Redis precisa percorrer metade dela.

Um array nativo resolve isso. Acesso por índice em tempo constante, suporte a arrays esparsos (onde você pode fazer ARSET myarray 293842948324 foo sem alocar bilhões de posições vazias), e operações de scan que rodam em tempo proporcional aos elementos existentes, não ao range total.

A pergunta que fica: se era tão útil, por que ninguém fez antes?

A resposta do próprio antirez é honesta — a complexidade interna necessária para suportar arrays esparsos de forma eficiente é absurda. E é exatamente aí que a IA entrou.

A Arquitetura: Diretórios Fatiados em Três Níveis

A primeira versão do Array usava uma estrutura de dois níveis: diretório + slices, alternando entre representações esparsas e densas dependendo da distribuição dos dados. Parecia funcional nos testes iniciais.

Até alguém tentar fazer ARSET myarray 293842948324 foo.

Com um índice desse tamanho, a estrutura de dois níveis simplesmente não escalava. O consumo de memória explodia e as operações de scan ficavam proporcionais ao range, não aos elementos reais. Antirez teve que repensar tudo.

A solução final é o que ele chama de “super directory of sliced dense directories” — três níveis hierárquicos:

Nível Função Detalhes
——- ——– ———-
Super Directory Mapa esparso dos ranges ativos Indexa quais regiões do array realmente contêm dados
Sub-Directory Diretório denso por região Cada entrada cobre um bloco de 4.096 posições
Slice Armazenamento real dos dados Pode alternar entre representação esparsa e densa

O número mágico é 4.096 elementos por slice — configurável, mas esse valor oferece o melhor equilíbrio entre granularidade e overhead de memória. A estrutura “muda de forma” internamente quando certas condições são atingidas: se um slice esparso atinge uma densidade alta o suficiente, ele se converte automaticamente para denso, e vice-versa.

Isso significa que um ARSCAN ou ARPOP roda em tempo proporcional apenas aos elementos existentes. Mesmo que seu array tenha índices em 0, 1.000.000 e 999.999.999, as operações ignoram os buracos.


# Criar um array esparso com 3 elementos
ARSET meuarray 0 "primeiro"
ARSET meuarray 1000000 "meio"
ARSET meuarray 999999999 "fim"

# Scan percorre apenas 3 elementos, não 1 bilhão
ARSCAN meuarray 0 -1

Os Comandos do Redis Array

O set de comandos é enxuto, mas cobre os casos de uso principais:


# Setar valor em índice específico
ARSET myarray 42 "hello world"

# Inserir (shift dos elementos seguintes)
ARINSERT myarray 10 "novo elemento"

# Scan com range
ARSCAN myarray 0 100

# Pop (remove e retorna)
ARPOP myarray 0    # primeiro elemento
ARPOP myarray -1   # último elemento

# Grep com regex
ARGREP myarray "docker|kubernetes|devops"

Espera. Grep? Em um array Redis?

ARGREP: Quando Um Tipo de Dado Vira Uma Ferramenta de Busca

Essa foi a parte inesperada do projeto. Enquanto antirez modelava casos de uso para o Array — usando arquivos markdown para documentar cenários —, ele percebeu que precisava de funcionalidade de busca textual. Não algo sofisticado como full-text search, mas o bom e velho grep.

Assim nasceu o ARGREP, que implementa busca por expressões regulares diretamente no tipo Array. A engine por trás é a biblioteca TRE, uma implementação de regex otimizada para padrões com alternação (aquele foo|bar|zap que todo mundo usa).

Antirez não apenas integrou o TRE — ele otimizou o handling de padrões de alternação e corrigiu problemas de segurança que encontrou na biblioteca. Quem conhece o estilo do criador do Redis sabe que ele não aceita dependências externas sem reescrever pelo menos metade delas.

O resultado prático:


# Buscar todas as entradas que mencionam Python ou Rust
ARGREP logs "python|rust"

# Encontrar padrões de erro
ARGREP events "error.*timeout"

# Busca case-insensitive (via flags do TRE)
ARGREP messages "(?i)urgente"

Para quem usa Redis como store de logs, eventos ou mensagens, isso elimina a necessidade de puxar tudo para o cliente e filtrar localmente. A busca acontece no servidor, em tempo proporcional aos elementos existentes.

4 Meses com IA: O Que Funcionou e O Que Não Funcionou

Aqui é onde a história fica realmente interessante para qualquer dev que usa (ou quer usar) IA no dia a dia.

Antirez documentou sua experiência de forma brutalmente honesta. Ele começou pareando com o Claude Opus para a fase de especificação — o primeiro mês inteiro foi gasto escrevendo specs, não código. A IA não escreveu a spec sozinha; o processo foi de vai-e-volta constante, com antirez desafiando as sugestões e a IA desafiando as decisões dele.

Na implementação, ele migrou para GPT para “tarefas de programação de sistema” — provavelmente porque na época o GPT tinha vantagem em geração de código C, que é a linguagem do Redis.

Mas o ponto mais revelador é a analogia que ele usa: a IA como rede de segurança.

Sabe quando você está escalando e tem uma rede embaixo? Você não pula com mais força por causa da rede — ela está lá para quando você escorregar. Antirez usou a IA da mesma forma: ela permitiu que ele explorasse complexidades que ele teria evitado se estivesse sozinho. Não porque a IA escreveu o código difícil, mas porque ela absorveu o trabalho tedioso (como portar tudo para suporte 32-bit) e liberou o tempo dele para as decisões de design que realmente importam.

O que a IA fez bem

  • Fase de especificação: ida e volta de feedback, desafios intelectuais sobre design
  • Código repetitivo: suporte 32-bit, boilerplate, testes de stress
  • Code review: uma segunda opinião instantânea sobre decisões de implementação
  • Reescrita de módulos: quando antirez decidia refatorar, a IA regenerava o código mais rápido

O que a IA NÃO substituiu

  • Decisões arquiteturais: a mudança de 2 para 3 níveis de diretório foi 100% humana
  • Otimização de performance: entender por que uma estrutura não escalava exigiu intuição
  • Segurança: os bugs no TRE foram encontrados por revisão manual
  • Sabor do design: o que incluir vs. o que deixar de fora — o minimalismo que define o Redis

A frase que resume tudo: “For high quality system programming tasks you have to still be fully involved.”

O Cronograma Real (Spoiler: Não Foi Rápido)

Período Atividade Envolvimento IA
——— ———– —————–
Mês 1 Especificação detalhada Alto — vai-e-volta de feedback
Mês 2 Implementação v1 (2 níveis) Médio — geração de código
Mês 3 Redesign para 3 níveis + stress tests Baixo — decisões humanas
Mês 4 ARGREP, otimização TRE, PR final Médio — reescrita de módulos

Quatro meses para um tipo de dado. Parece muito? Considere que o último tipo adicionado ao Redis (Streams, em 2018) levou mais de um ano de desenvolvimento. O Array é significativamente mais complexo internamente, e foi feito em menos da metade do tempo.

A IA não fez o projeto em uma tarde. Mas comprimiu um trabalho de 12+ meses para 4. Essa é a realidade da programação assistida por IA em 2026: não é magia, é alavancagem.

Como Isso Muda o Redis na Prática

Se você usa Redis hoje, o Array abre cenários que antes exigiam gambiarras:

Time-series simplificado: Em vez de usar Sorted Sets com scores como timestamps, um Array esparso com índices baseados em timestamp UNIX funciona nativamente. O ARSCAN com range faz a consulta temporal.

Logs estruturados: Arrays como buffers de log com ARGREP embutido eliminam o padrão “puxa tudo pro cliente e filtra”. Para aplicações que processam milhões de eventos, isso é a diferença entre latência de microsegundos e millisegundos.

Filas com prioridade: ARINSERT permite inserção em posição arbitrária, algo impossível com listas Redis sem recriar a estrutura inteira.

Sparse data: Dados de sensores IoT, métricas com gaps, matrizes esparsas — qualquer coisa onde os índices não são contíguos. Antes, a solução era usar Hashes com chaves numéricas como strings, perdendo toda a semântica de ordenação.


import redis

r = redis.Redis()

# Time-series com Array esparso
import time
ts = int(time.time())
r.execute_command('ARSET', 'sensor:temp', ts, '23.5')
r.execute_command('ARSET', 'sensor:temp', ts + 60, '23.8')
r.execute_command('ARSET', 'sensor:temp', ts + 120, '24.1')

# Consulta dos últimos 5 minutos
start = ts
end = ts + 300
results = r.execute_command('ARSCAN', 'sensor:temp', start, end)

O Elefante na Sala: Redis É Open Source de Novo?

Quem acompanha a saga do Redis sabe que em 2024 a empresa mudou a licença de BSD para uma dual-license restritiva (RSALv2/SSPL), causando forks como o Valkey. Antirez criticou publicamente a mudança na época.

O fato dele ter voltado — e estar contribuindo ativamente — levanta perguntas. O Array vai estar disponível no Valkey? Vai ser apenas para o Redis comercial? No blog post, antirez não toca nesse assunto. Mas o PR está no repositório principal do Redis, o que sugere que estará disponível para todos os usuários do Redis (mas não necessariamente nos forks, que precisarão portar manualmente).

Para quem migrou para o Valkey, vale ficar de olho. Features desse calibre são difíceis de ignorar.

Lições para Quem Quer Usar IA em Projetos Complexos

O relato do antirez é provavelmente o melhor estudo de caso público sobre IA em programação de sistemas que temos em 2026. Não é um tutorial de “como fazer um CRUD com ChatGPT” — é o criador de uma das bases de dados mais usadas do mundo explicando como integrou IA em um projeto de 4 meses de engenharia pesada.

Os takeaways que eu destaco:

1. Spec primeiro, código depois. Antirez gastou 25% do tempo total apenas na especificação. A IA foi mais útil nessa fase do que na implementação. A maioria dos devs que reclamam que “a IA gera código ruim” nunca gastaram uma hora escrevendo uma spec decente.

2. Troque de modelo sem cerimônia. Ele usou Claude para spec e GPT para código C. Não existe lealdade a modelo — existe a ferramenta certa para o momento.

3. A IA amplia, não substitui. Quatro meses em vez de doze não é porque a IA escreveu o código. É porque ela absorveu o trabalho braçal e liberou o humano para pensar nas partes difíceis.

4. Revise tudo. As otimizações de segurança no TRE vieram de revisão humana. Se antirez tivesse confiado cegamente na integração da IA, o Redis teria uma vulnerabilidade nova.

O Array deve chegar em uma release estável do Redis nos próximos meses. Quando chegar, lembre que por trás dele tem um italiano teimoso que se recusa a aceitar código que não entende — mesmo quando foi uma IA que escreveu.


Fonte de inspiração: Redis array: short story of a long development process — antirez

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Posts