Todos os produtos
Search
Central de documentação

Tair (Redis® OSS-Compatible):Cpc

Última atualização: Jun 26, 2026

O TairCpc é uma estrutura de dados baseada no sketch de contagem de probabilidade comprimida (CPC). Ele oferece estimativa de cardinalidade com alta precisão e consumo de memória significativamente menor que o HyperLogLog (HLL), sendo ideal para deduplicação em tempo real em fluxos de dados de alto throughput.

Contexto

Sistemas de decisão em tempo real processam eventos de negócio conforme ocorrem, armazenam resultados para acesso rápido e aplicam regras para agir imediatamente. A contagem de cardinalidade com baixa latência é crítica em cenários como:

  • Prevenção de fraudes com cartão de crédito: identificar se um cartão está sendo usado em contexto suspeito e interromper transações duvidosas o mais cedo possível.

  • Combate à revenda ilegal de ingressos: detectar e bloquear bots que usam dispositivos virtuais e endereços IP falsos antes da aquisição de estoque.

Com o TairCpc, você deduplica os dados recebidos por dimensão, armazena o sketch em uma instância Tair e executa consultas de agregação em nanosegundos — combinando armazenamento e processamento em uma única camada.

Visão geral

O CPC conta valores distintos em um fluxo de dados e permite mesclar vários sketches para obter um total combinado. Em comparação ao HLL, o CPC atinge a mesma precisão com aproximadamente 40% menos memória.

O TairCpc estende a implementação open source do CPC e reduz a taxa de erro para 0,008%, contra 0,67% do CPC padrão e 1,95% do HLL.

Considere o TairCpc como uma alternativa eficiente em memória ao Set para contar itens únicos:

Operação

Equivalente em Set

Equivalente em TairCpc

Adicionar um item

SADD key item

CPC.UPDATE key item

Contar itens únicos

SCARD key

CPC.ESTIMATE key

Diferentemente de um Set, o TairCpc não armazena os itens brutos — ele guarda um sketch compacto que aproxima a contagem. Essa troca permite agregações em escala massiva com latência sub-milissegundo.

Principais recursos

  • Baixo consumo de memória com leituras e gravações incrementais e E/S mínima

  • Deduplicação de alto desempenho e altíssima precisão

  • Taxa de erro reduzida de 0,008% (contra 0,67% do CPC open source e 1,95% do HLL)

Casos de uso

  • Sistemas de segurança bancária: quantas contas ou dispositivos distintos executaram uma determinada ação no último minuto?

  • Vendas relâmpago: quantos usuários únicos tentaram comprar este item na janela de tempo atual?

  • Combate à revenda ilegal de ingressos: quantos endereços IP distintos enviaram solicitações desta sessão nos últimos 10 segundos?

Pré-requisitos

Antes de começar, verifique se sua instância pertence a um dos seguintes tipos da série Tair:

Mantenha sua instância na versão secundária mais recente para garantir o maior número de recursos e a melhor estabilidade. Para instruções de atualização, consulte Atualizar a versão secundária de uma instância . Para instâncias cluster e instâncias com divisão de leitura/escrita, atualize também os nós proxy para a versão secundária mais recente, garantindo que todos os comandos funcionem conforme esperado.

Observações de uso

Os dados do TairCpc são armazenados em uma instância Tair.

Comandos suportados

Comando

Sintaxe

Descrição

CPC.UPDATE

`CPC.UPDATE key item [EX

EXAT

PX

PXAT time]`

Adiciona um item a uma chave. Cria a chave se ela não existir. Não faz nada se o item já existir.

CPC.ESTIMATE

CPC.ESTIMATE key

Retorna a estimativa de cardinalidade deduplicada para uma chave como DOUBLE.

CPC.UPDATE2EST

`CPC.UPDATE2EST key item [EX

EXAT

PX

PXAT time]`

Adiciona um item e retorna a estimativa DOUBLE atualizada. Cria a chave se ela não existir.

CPC.UPDATE2JUD

`CPC.UPDATE2JUD key item [EX

EXAT

PX

PXAT time]`

Adiciona um item e retorna a estimativa atualizada mais a diferença. Use a diferença para detectar duplicatas: 1 = item novo, 0 = duplicata.

CPC.ARRAY.UPDATE

`CPC.ARRAY.UPDATE key timestamp item [EX

EXAT

PX

PXAT time] [SIZE size] [WIN window_length]`

Adiciona um item à janela de tempo correspondente ao timestamp fornecido.

CPC.ARRAY.ESTIMATE

CPC.ARRAY.ESTIMATE key timestamp

Retorna a estimativa de cardinalidade para a janela de tempo correspondente ao timestamp fornecido.

CPC.ARRAY.ESTIMATE.RANGE

CPC.ARRAY.ESTIMATE.RANGE key start_time end_time

Retorna estimativas de cardinalidade por janela em um intervalo de tempo (intervalo fechado).

CPC.ARRAY.ESTIMATE.RANGE.MERGE

CPC.ARRAY.ESTIMATE.RANGE.MERGE key timestamp range

Retorna a estimativa mesclada e deduplicada a partir de um timestamp, abrangendo N janelas de tempo retroativamente.

CPC.ARRAY.UPDATE2EST

`CPC.ARRAY.UPDATE2EST key timestamp item [EX

EXAT

PX

PXAT time] [SIZE size] [WIN window_length]`

Adiciona um item a uma janela de tempo e retorna a estimativa atualizada para essa janela.

CPC.ARRAY.UPDATE2JUD

`CPC.ARRAY.UPDATE2JUD key timestamp item [EX

EXAT

PX

PXAT time] [SIZE size] [WIN window_length]`

Adiciona um item a uma janela de tempo e retorna a estimativa atualizada e a diferença para essa janela.

DEL

DEL key [key ...]

Exclui uma ou mais chaves TairCpc.

Convenções de sintaxe

  • MAIÚSCULAS: palavra-chave do comando

  • _itálico_: variável

  • [opção]: parâmetro opcional

  • A|B: opções mutuamente exclusivas — especifique apenas uma

  • ...: o parâmetro anterior pode ser repetido

CPC.UPDATE

Adiciona um item a uma chave TairCpc. Cria a chave se ela não existir. Se o item já existir, o comando não executa nenhuma operação.

Sintaxe

CPC.UPDATE key item [EX|EXAT|PX|PXAT time]

Complexidade de tempo O(1)

Parâmetros

Parâmetro

Descrição

key

Chave TairCpc a atualizar.

item

Item a adicionar.

EX time

Tempo de expiração relativo em segundos. A chave não expira se omitido.

EXAT time

Tempo de expiração absoluto como timestamp UNIX em segundos. A chave não expira se omitido.

PX time

Tempo de expiração relativo em milissegundos. A chave não expira se omitido.

PXAT time

Tempo de expiração absoluto como timestamp UNIX em milissegundos. A chave não expira se omitido.

Valor de retorno

  • OK em caso de sucesso.

  • Mensagem de erro em caso de falha.

Exemplo

CPC.UPDATE foo f1 EX 3600
OK

CPC.ESTIMATE

Retorna a estimativa de cardinalidade de uma chave TairCpc após deduplicação. O valor retornado é um DOUBLE — arredonde para o inteiro mais próximo para obter uma contagem utilizável.

Sintaxe

CPC.ESTIMATE key

Complexidade de tempo: O(1)

Parâmetros

Parâmetro

Descrição

key

Chave TairCpc a consultar.

Valor de retorno

  • Estimativa de cardinalidade do tipo DOUBLE em caso de sucesso.

  • Mensagem de erro em caso de falha.

Exemplo

CPC.ESTIMATE foo
"19.000027716212127"

CPC.UPDATE2EST

Adiciona um item a uma chave TairCpc e retorna a estimativa de cardinalidade atualizada em uma única ida e volta. Cria a chave se ela não existir.

Sintaxe

CPC.UPDATE2EST key item [EX|EXAT|PX|PXAT time]

Complexidade de tempo: O(1)

Parâmetros

Parâmetro

Descrição

key

Chave TairCpc a atualizar.

item

Item a adicionar.

EX time

Tempo de expiração relativo em segundos. A chave não expira se omitido.

EXAT time

Tempo de expiração absoluto como timestamp UNIX em segundos. A chave não expira se omitido.

PX time

Tempo de expiração relativo em milissegundos. A chave não expira se omitido.

PXAT time

Tempo de expiração absoluto como timestamp UNIX em milissegundos. A chave não expira se omitido.

Valor de retorno

  • Estimativa de cardinalidade do tipo DOUBLE após a atualização em caso de sucesso.

  • Mensagem de erro em caso de falha.

Exemplo

CPC.UPDATE2EST foo f3
"3.0000004768373003"

CPC.UPDATE2JUD

Adiciona um item a uma chave TairCpc e retorna tanto a estimativa de cardinalidade atualizada quanto a diferença em relação à estimativa anterior. Use a diferença para determinar se o item era novo ou já existia — sem precisar de um comando de leitura separado.

  • Se a diferença retornada for 1, o item era novo (sem duplicata).

  • Se a diferença retornada for 0, o item já existia (duplicata detectada).

Cria a chave se ela não existir.

Sintaxe

CPC.UPDATE2JUD key item [EX|EXAT|PX|PXAT time]

Complexidade de tempo: O(1)

Parâmetros

Parâmetro

Descrição

key

Chave TairCpc a atualizar.

item

Item a adicionar.

EX time

Tempo de expiração relativo em segundos. A chave não expira se omitido.

EXAT time

Tempo de expiração absoluto como timestamp UNIX em segundos. A chave não expira se omitido.

PX time

Tempo de expiração relativo em milissegundos. A chave não expira se omitido.

PXAT time

Tempo de expiração absoluto como timestamp UNIX em milissegundos. A chave não expira se omitido.

Valor de retorno

  • Em caso de sucesso: dois valores DOUBLE — a nova estimativa de cardinalidade e, em seguida, a diferença entre as estimativas nova e anterior.

  • Mensagem de erro em caso de falha.

Exemplo

CPC.UPDATE2JUD foo f20
1) "20.000027716212127"    // New cardinality estimate: 20
2) "1.0000014901183398"    // Difference: 20 - 19 = 1 (new item)

CPC.ARRAY.UPDATE

Adiciona um item a uma chave de array TairCpc dentro da janela de tempo correspondente ao timestamp fornecido. Cria a chave se ela não existir.

Uma chave de array TairCpc mantém uma janela deslizante de sketches CPC. Cada chamada grava dados na janela de tempo correspondente ao timestamp. O período total observável é de SIZE × WIN milissegundos. Dados fora desse período são sobrescritos conforme novos dados chegam.

Os parâmetros SIZE e WIN são aplicados apenas quando a chave é criada pela primeira vez. Gravações subsequentes na mesma chave usam os valores definidos no momento da criação.

Exemplo: Para rastrear eventos únicos por minuto nos últimos 10 minutos, defina SIZE como 10 e WIN como 60000. Quando os dados do 11º minuto chegarem, os dados do primeiro minuto serão sobrescritos.

Sintaxe

CPC.ARRAY.UPDATE key timestamp item [EX|EXAT|PX|PXAT time] [SIZE size] [WIN window_length]

Complexidade de tempo: O(1)

Parâmetros

Parâmetro

Descrição

key

Chave de array TairCpc a atualizar.

timestamp

Timestamp UNIX em milissegundos indicando em qual janela de tempo gravar.

item

Item a adicionar.

EX time

Tempo de expiração relativo em segundos. A chave não expira se omitido.

EXAT time

Tempo de expiração absoluto como timestamp UNIX em segundos. A chave não expira se omitido.

PX time

Tempo de expiração relativo em milissegundos. A chave não expira se omitido.

PXAT time

Tempo de expiração absoluto como timestamp UNIX em milissegundos. A chave não expira se omitido.

SIZE size

Número de janelas de tempo. Padrão: 10. Intervalo válido: 1–1000. Mantenha abaixo de 120 para cargas de trabalho típicas.

WIN window_length

Duração de cada janela de tempo em milissegundos. Padrão: 60000 (1 minuto).

Valor de retorno

  • OK em caso de sucesso.

  • Mensagem de erro em caso de falha.

Exemplo

CPC.ARRAY.UPDATE foo 1645584510000 f1 SIZE 120 WIN 10000
OK

CPC.ARRAY.ESTIMATE

Retorna a estimativa de cardinalidade para a janela de tempo correspondente ao timestamp fornecido.

Sintaxe

CPC.ARRAY.ESTIMATE key timestamp

Complexidade de tempo: O(1)

Parâmetros

Parâmetro

Descrição

key

Chave de array TairCpc a consultar.

timestamp

Timestamp UNIX em milissegundos identificando a janela de tempo a consultar.

Valor de retorno

  • Estimativa de cardinalidade para a janela de tempo correspondente em caso de sucesso.

  • Mensagem de erro em caso de falha.

Exemplo

CPC.ARRAY.ESTIMATE foo 1645584532000
"2"

CPC.ARRAY.ESTIMATE.RANGE

Retorna estimativas de cardinalidade por janela para todas as janelas de tempo dentro de um intervalo especificado (intervalo fechado). Cada valor na resposta corresponde a uma janela de tempo.

Sintaxe

CPC.ARRAY.ESTIMATE.RANGE key start_time end_time

Complexidade de tempo: O(1)

Parâmetros

Parâmetro

Descrição

key

Chave de array TairCpc a consultar.

start_time

Início do intervalo de tempo como timestamp UNIX em milissegundos.

end_time

Fim do intervalo de tempo como timestamp UNIX em milissegundos.

Valor de retorno

  • Lista de estimativas de cardinalidade, uma por janela de tempo no intervalo, em caso de sucesso.

  • Mensagem de erro em caso de falha.

Exemplo

CPC.ARRAY.ESTIMATE.RANGE foo 1645584510000 1645584550000
1) "2"
2) "0"
3) "1"
4) "0"
5) "0"

CPC.ARRAY.ESTIMATE.RANGE.MERGE

Retorna uma única estimativa de cardinalidade mesclada e deduplicada, agregando N janelas de tempo a partir do timestamp fornecido em ordem regressiva.

Use este comando quando precisar de uma contagem única unificada em várias janelas de tempo — por exemplo, total de usuários únicos nos últimos 5 minutos — em vez de contagens por janela individual.

Sintaxe

CPC.ARRAY.ESTIMATE.RANGE.MERGE key timestamp range

Complexidade de tempo: O(1)

Parâmetros

Parâmetro

Descrição

key

Chave de array TairCpc a consultar.

timestamp

Ponto inicial da consulta como timestamp UNIX em milissegundos.

range

Número de janelas de tempo a mesclar, contando retroativamente a partir do timestamp.

Valor de retorno

  • Estimativa de cardinalidade mesclada e deduplicada em caso de sucesso.

  • Mensagem de erro em caso de falha.

Exemplo

CPC.ARRAY.ESTIMATE.RANGE.MERGE foo 1645584510000 3
"6"

CPC.ARRAY.UPDATE2EST

Adiciona um item à janela de tempo correspondente ao timestamp fornecido e retorna a estimativa de cardinalidade atualizada para essa janela em uma única ida e volta. Cria a chave se ela não existir.

Usa os mesmos parâmetros de criação de chave que o CPC.ARRAY.UPDATE.

Sintaxe

CPC.ARRAY.UPDATE2EST key timestamp item [EX|EXAT|PX|PXAT time] [SIZE size] [WIN window_length]

Complexidade de tempo: O(1)

Parâmetros

Parâmetro

Descrição

key

Chave de array TairCpc a atualizar.

timestamp

Timestamp UNIX em milissegundos identificando a janela de tempo alvo.

item

Item a adicionar.

EX time

Tempo de expiração relativo em segundos. A chave não expira se omitido.

EXAT time

Tempo de expiração absoluto como timestamp UNIX em segundos. A chave não expira se omitido.

PX time

Tempo de expiração relativo em milissegundos. A chave não expira se omitido.

PXAT time

Tempo de expiração absoluto como timestamp UNIX em milissegundos. A chave não expira se omitido.

SIZE size

Número de janelas de tempo. Padrão: 10. Intervalo válido: 1–1000. Mantenha abaixo de 120 para cargas de trabalho típicas.

WIN window_length

Duração de cada janela de tempo em milissegundos. Padrão: 60000 (1 minuto).

Valor de retorno

  • Estimativa de cardinalidade DOUBLE atualizada para a janela de tempo em caso de sucesso.

  • Mensagem de erro em caso de falha.

Exemplo

CPC.ARRAY.UPDATE2EST foo 1645584530000 f3
"3"

CPC.ARRAY.UPDATE2JUD

Adiciona um item à janela de tempo correspondente ao timestamp fornecido e retorna tanto a estimativa de cardinalidade atualizada quanto a diferença em relação à estimativa anterior para essa janela. Cria a chave se ela não existir.

  • Se a diferença retornada for 1, o item era novo (sem duplicata nesta janela).

  • Se a diferença retornada for 0, o item já existia nesta janela.

Usa os mesmos parâmetros de criação de chave que o CPC.ARRAY.UPDATE.

Sintaxe

CPC.ARRAY.UPDATE2JUD key timestamp item [EX|EXAT|PX|PXAT time] [SIZE size] [WIN window_length]

Complexidade de tempo: O(1)

Parâmetros

Parâmetro

Descrição

key

Chave de array TairCpc a atualizar.

timestamp

Timestamp UNIX em milissegundos identificando a janela de tempo alvo.

item

Item a adicionar.

EX time

Tempo de expiração relativo em segundos. A chave não expira se omitido.

EXAT time

Tempo de expiração absoluto como timestamp UNIX em segundos. A chave não expira se omitido.

PX time

Tempo de expiração relativo em milissegundos. A chave não expira se omitido.

PXAT time

Tempo de expiração absoluto como timestamp UNIX em milissegundos. A chave não expira se omitido.

SIZE size

Número de janelas de tempo. Padrão: 10. Intervalo válido: 1–1000. Mantenha abaixo de 120 para cargas de trabalho típicas.

WIN window_length

Duração de cada janela de tempo em milissegundos. Padrão: 60000 (1 minuto).

Valor de retorno

  • Em caso de sucesso: dois valores — a estimativa de cardinalidade atualizada para a janela de tempo e, em seguida, a diferença entre as estimativas nova e anterior.

  • Mensagem de erro em caso de falha.

Exemplo

CPC.ARRAY.UPDATE2JUD foo 1645584530000 f7
1) "8"    // New cardinality estimate for this window: 8
2) "1"    // Difference: 8 - 7 = 1 (new item)