CEVIU Logo
Voltar

Redis 8.8 apresenta tipo de dado Array nativo com acesso posicional em tempo constante

Aprofundamento CEVIU

Aprofundamento

O Redis Array não é só mais um tipo de dado: é uma mudança arquitetural que corrige uma limitação estrutural antiga do Redis. Até a versão 8.7, acessar um elemento por índice em listas (LPUSH/LPOP) exigia O(N) no pior caso, porque listas eram implementadas como linked lists, mesmo com otimizações recentes, não permitiam acesso aleatório eficiente. O novo Array é uma estrutura hierárquica de diretórios com alocação sob demanda por grupos de 4096 slots, o que garante O(1) para ARGET e ARSET, mesmo em índices acima de 8 milhões. Isso permite usar o Redis como camada de indexação densa, por exemplo, mapear linhas de um log para índices numéricos fixos ou manter buffers circulares sem LTRIM, com ARRING. A economia de memória em dados esparsos é real: se você define apenas o índice 10.000.000, o Redis aloca apenas o grupo necessário, não 10M+ slots vazios.

Essa eficiência ressoa diretamente com o artigo 'Cada byte importa', que mostrou como arrays contíguos em C reduzem cache misses e melhoram throughput, o Array do Redis replica esse princípio no nível da base de dados, mas com flexibilidade de endereçamento em 64 bits e sem decaimento para ponteiro. Também alinha-se ao foco em IA: o controle explícito de formatos numéricos (BF16, FP32) em arrays JSON reduz até 92% de uso de memória em workloads vetoriais, algo crítico para sistemas que integram embedding com análise em tempo real, como os citados em RushDB 2.0 e CockroachDB com C-SPANN.

O que mudou

A diferença entre o que era possível antes e o que o Array entrega agora é radical. Antes, desenvolvedores simulavam arrays com hashes (HSET user:123 idx_42 value), mas perdiam acesso posicional verdadeiro, semântica de intervalo e operações nativas de agregação. Comandos como ARGREP (busca de padrões no servidor) e AROP (SUM/MIN/MAX sobre faixas) não existiam, exigiam Lua ou processamento no aplicativo. A versão 8.8 também elimina a necessidade de scripts para rate limiting (INCREX) e introduz XNACK para Streams, fechando lacunas operacionais que persistiam desde a v7.0. Não é evolução incremental: é a primeira vez que o Redis oferece uma estrutura com semântica de array verdadeira, projetada desde o zero por Sanfilippo para substituir soluções paliativas.

Por que isso importa

Para engenheiros de dados e plataformas, isso muda o custo-benefício de usar Redis em pipelines que exigem janelas deslizantes, logs indexados por timestamp ou agregação em tempo real, sem precisar migrar para sistemas especializados ou adicionar camadas de cache. Para equipes de IA, a redução de 92% na memória de arrays numéricos em JSON significa carregar embeddings maiores em menos nós, diminuindo latência e custo de infraestrutura. E, diferentemente de índices vetoriais em Postgres ou Manticore, o Array não é uma camada de busca aproximada: é um tipo primitivo com garantia de consistência, baixa latência e controle preciso de memória, útil onde exatidão e velocidade são não negociáveis, como em sistemas agentic com estado compartilhado em tempo real.

Linha do tempo

  1. CEVIU analisa complexidade de arrays em C e perda de tamanho em expressões

  2. CEVIU cobre RushDB 2.0 e CockroachDB com C-SPANN para busca vetorial escalável

  3. CEVIU detalha tradeoffs de índices vetoriais no Postgres

  4. Redis 8.8 lança tipo Array nativo com acesso posicional em O(1), suporte a dados esparsos e operações de agregação no servidor

Perguntas frequentes

O Redis Array substitui as Listas (LIST) do Redis?

Não substitui, mas complementa. Listas continuam ideais para filas FIFO/LIFO e operações de ponta. Arrays são para quando você precisa de acesso por índice, intervalos, buffers circulares ou agregação, casos em que listas tinham complexidade O(N) e não ofereciam semântica de posição fixa.

Como o Array lida com índices muito altos, como 2^64-1?

Ele usa uma estrutura hierárquica de diretórios: começa com dois níveis, sobe para três níveis automaticamente ao ultrapassar ~8,3 milhões de índices. A alocação é esparsa, só gasta memória nos grupos de 4096 slots que recebem dados, não em todo o espaço endereçável.

É possível usar o Array para buscas vetoriais como no Postgres ou CockroachDB?

Não diretamente: o Array não implementa HNSW, IVF ou C-SPANN. Mas ele é a base ideal para armazenar vetores com controle de formato (FP16, BF16) e fazer pré-processamento rápido, como normalização, slicing ou agregação, antes de enviar para um serviço especializado de busca vetorial.

Quais comandos novos o Array introduz e quais problemas eles resolvem?

ARSET/ARGET (acesso O(1) por índice), ARRING (buffers circulares sem LTRIM), ARSCAN (iteração só em slots ocupados), ARGREP (busca GLOB/regex no servidor), AROP (agregação SUM/MIN/MAX). Resolvem a necessidade de scripts Lua, reduzem round trips e permitem processamento próximo aos dados.

Fontes

Avalie este artigo:
Compartilhar:
Categoria
CEVIU Dados
Publicado
04 de junho de 2026
Editoria
CEVIU Dados

Quer receber mais sobre CEVIU Dados?

Conteúdo curado diariamente, direto no seu e-mail.

Conteúdo curado diariamenteDiversas categoriasCancele quando quiser