Todos los productos
Search
Centro de documentos

Tair (Redis® OSS-Compatible):Cpc

Última actualización: Sep 03, 2026

TairCpc es una estructura de datos basada en el sketch de conteo de probabilidad comprimida (CPC). Ofrece estimaciones de cardinalidad con alta precisión y un consumo de memoria significativamente menor que HyperLogLog (HLL), lo que la hace ideal para la deduplicación en tiempo real dentro de flujos de datos de alto rendimiento.

Contexto

Los sistemas de toma de decisiones en tiempo real procesan eventos de negocio conforme llegan, almacenan los resultados para un acceso rápido y aplican reglas para actuar de inmediato. A continuación se presentan dos ejemplos donde el conteo de cardinalidad con baja latencia es fundamental:

  • Prevención de fraude con tarjetas de crédito: Determinar si una tarjeta se utiliza en un contexto sospechoso y detener las transacciones inusuales a la brevedad posible.

  • Prevención de reventa de boletos: Detectar y detener bots que usan dispositivos virtuales y direcciones IP falsas antes de que adquieran inventario.

TairCpc le permite deduplicar los datos entrantes por dimensión, almacenar el sketch en una instancia de Tair y ejecutar consultas de agregación en nanosegundos, con lo cual combina almacenamiento y cómputo en una sola capa.

Descripción general

CPC cuenta valores distintos en un flujo de datos y admite la fusión de varios sketches para obtener un total combinado. En comparación con HLL, CPC logra la misma precisión con aproximadamente un 40 % menos de memoria.

TairCpc amplía la implementación de código abierto de CPC y reduce la tasa de error al 0.008%, frente al 0.67% del CPC estándar y al 1.95% de HLL.

Considere TairCpc como una alternativa eficiente en memoria a un Set para contar elementos únicos:

Operación

Equivalente en Set

Equivalente en TairCpc

Agregar un elemento

SADD key item

CPC.UPDATE key item

Contar elementos únicos

SCARD key

CPC.ESTIMATE key

A diferencia de un Set, TairCpc no almacena los elementos sin procesar, sino un sketch compacto que aproxima el conteo. Esta compensación permite realizar agregaciones en menos de un milisegundo a gran escala.

Funciones principales

  • Bajo consumo de memoria con lecturas y escrituras incrementales, además de E/S mínima

  • Deduplicación de alto rendimiento y precisión extremadamente alta

  • Tasa de error reducida del 0.008% (frente al 0.67% del CPC de código abierto y al 1.95% de HLL)

Casos de uso

  • Sistemas de seguridad bancaria: ¿Cuántas cuentas o dispositivos distintos han realizado una acción específica en el último minuto?

  • Ventas flash: ¿Cuántos usuarios únicos han intentado comprar este artículo en la ventana de tiempo actual?

  • Prevención de reventa de boletos: ¿Cuántas direcciones IP distintas han enviado solicitudes desde esta sesión en los últimos 10 segundos?

Requisitos previos

Antes de empezar, asegúrese de que su instancia corresponda a uno de los siguientes tipos de la serie Tair:

  • Instancia DRAM-based. Si la instancia es compatible con Redis 5.0, la versión secundaria debe ser la 1.7.20 o posterior.

  • Instancia Persistent memory-optimized con versión secundaria 1.2.3.3 o posterior.

Mantenga su instancia en la versión secundaria más reciente para obtener la mayor cantidad de funciones y la máxima estabilidad. Para consultar las instrucciones de actualización, consulte Actualizar la versión secundaria de una instancia . En el caso de instancias de clúster e instancias con división de lectura/escritura, actualice también los nodos proxy a la versión secundaria más reciente para garantizar que todos los comandos se ejecuten correctamente.

Notas de uso

Los datos de TairCpc se almacenan en una instancia de Tair.

Comandos compatibles

Comando

Sintaxis

Descripción

CPC.UPDATE

`CPC.UPDATE key item [EX

EXAT

PX

PXAT time]`

Agrega un elemento a una clave. Crea la clave si no existe. No realiza ninguna acción si el elemento ya existe.

CPC.ESTIMATE

CPC.ESTIMATE key

Devuelve la estimación de cardinalidad deduplicada para una clave como un valor DOUBLE.

CPC.UPDATE2EST

`CPC.UPDATE2EST key item [EX

EXAT

PX

PXAT time]`

Agrega un elemento y devuelve la estimación DOUBLE actualizada. Crea la clave si no existe.

CPC.UPDATE2JUD

`CPC.UPDATE2JUD key item [EX

EXAT

PX

PXAT time]`

Agrega un elemento y devuelve la estimación actualizada junto con la diferencia. Utilice la diferencia para detectar duplicados: 1 = elemento nuevo, 0 = duplicado.

CPC.ARRAY.UPDATE

`CPC.ARRAY.UPDATE key timestamp item [EX

EXAT

PX

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

Agrega un elemento a la ventana de tiempo correspondiente a la marca de tiempo indicada.

CPC.ARRAY.ESTIMATE

CPC.ARRAY.ESTIMATE key timestamp

Devuelve la estimación de cardinalidad para la ventana de tiempo correspondiente a la marca de tiempo indicada.

CPC.ARRAY.ESTIMATE.RANGE

CPC.ARRAY.ESTIMATE.RANGE key start_time end_time

Devuelve estimaciones de cardinalidad por ventana a lo largo de un intervalo de tiempo (intervalo cerrado).

CPC.ARRAY.ESTIMATE.RANGE.MERGE

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

Devuelve la estimación fusionada y deduplicada a partir de una marca de tiempo, abarcando N ventanas de tiempo hacia atrás.

CPC.ARRAY.UPDATE2EST

`CPC.ARRAY.UPDATE2EST key timestamp item [EX

EXAT

PX

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

Agrega un elemento a una ventana de tiempo y devuelve la estimación actualizada para dicha ventana.

CPC.ARRAY.UPDATE2JUD

`CPC.ARRAY.UPDATE2JUD key timestamp item [EX

EXAT

PX

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

Agrega un elemento a una ventana de tiempo y devuelve la estimación actualizada y la diferencia para dicha ventana.

DEL

DEL key [key ...]

Elimina una o más claves de TairCpc.

Convenciones de sintaxis

  • MAYÚSCULAS: palabra clave del comando

  • _cursiva_: variable

  • [opción]: parámetro opcional

  • A|B: opciones mutuamente excluyentes; especifique solo una

  • ...: el parámetro anterior puede repetirse

CPC.UPDATE

Agrega un elemento a una clave de TairCpc. Crea la clave si no existe. Si el elemento ya existe, el comando no realiza ninguna acción.

Sintaxis

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

Complejidad temporal O(1)

Parámetros

Parámetro

Descripción

key

La clave de TairCpc que se actualizará.

item

El elemento que se agregará.

EX time

Tiempo de expiración relativo en segundos. La clave no expira si se omite.

EXAT time

Tiempo de expiración absoluto como marca de tiempo UNIX en segundos. La clave no expira si se omite.

PX time

Tiempo de expiración relativo en milisegundos. La clave no expira si se omite.

PXAT time

Tiempo de expiración absoluto como marca de tiempo UNIX en milisegundos. La clave no expira si se omite.

Valor devuelto

  • OK en caso de éxito.

  • Un mensaje de error en caso contrario.

Ejemplo

CPC.UPDATE foo f1 EX 3600
OK

CPC.ESTIMATE

Devuelve la estimación de cardinalidad de una clave de TairCpc después de la deduplicación. El valor devuelto es de tipo DOUBLE; redondéelo al entero más cercano para obtener un conteo utilizable.

Sintaxis

CPC.ESTIMATE key

Complejidad temporal: O(1)

Parámetros

Parámetro

Descripción

key

La clave de TairCpc que se consultará.

Valor devuelto

  • La estimación de cardinalidad de tipo DOUBLE en caso de éxito.

  • Un mensaje de error en caso contrario.

Ejemplo

CPC.ESTIMATE foo
"19.000027716212127"

CPC.UPDATE2EST

Agrega un elemento a una clave de TairCpc y devuelve la estimación de cardinalidad actualizada en un solo ciclo de solicitud-respuesta. Crea la clave si no existe.

Sintaxis

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

Complejidad temporal: O(1)

Parámetros

Parámetro

Descripción

key

La clave de TairCpc que se actualizará.

item

El elemento que se agregará.

EX time

Tiempo de expiración relativo en segundos. La clave no expira si se omite.

EXAT time

Tiempo de expiración absoluto como marca de tiempo UNIX en segundos. La clave no expira si se omite.

PX time

Tiempo de expiración relativo en milisegundos. La clave no expira si se omite.

PXAT time

Tiempo de expiración absoluto como marca de tiempo UNIX en milisegundos. La clave no expira si se omite.

Valor devuelto

  • La estimación de cardinalidad de tipo DOUBLE tras la actualización, en caso de éxito.

  • Un mensaje de error en caso contrario.

Ejemplo

CPC.UPDATE2EST foo f3
"3.0000004768373003"

CPC.UPDATE2JUD

Agrega un elemento a una clave de TairCpc y devuelve tanto la estimación de cardinalidad actualizada como la diferencia respecto a la estimación anterior. Utilice la diferencia para determinar si el elemento era nuevo o ya existía, sin necesidad de un comando de lectura adicional.

  • Si se devuelve una diferencia de 1, el elemento era nuevo (sin duplicados).

  • Si se devuelve una diferencia de 0, el elemento ya existía (duplicado detectado).

Crea la clave si no existe.

Sintaxis

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

Complejidad temporal: O(1)

Parámetros

Parámetro

Descripción

key

La clave de TairCpc que se actualizará.

item

El elemento que se agregará.

EX time

Tiempo de expiración relativo en segundos. La clave no expira si se omite.

EXAT time

Tiempo de expiración absoluto como marca de tiempo UNIX en segundos. La clave no expira si se omite.

PX time

Tiempo de expiración relativo en milisegundos. La clave no expira si se omite.

PXAT time

Tiempo de expiración absoluto como marca de tiempo UNIX en milisegundos. La clave no expira si se omite.

Valor devuelto

  • En caso de éxito: dos valores DOUBLE —la nueva estimación de cardinalidad y luego la diferencia entre la estimación nueva y la anterior—.

  • Un mensaje de error en caso contrario.

Ejemplo

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

CPC.ARRAY.UPDATE

Agrega un elemento a una clave de matriz de TairCpc dentro de la ventana de tiempo correspondiente a la marca de tiempo indicada. Crea la clave si no existe.

Una clave de matriz de TairCpc mantiene una ventana deslizante de sketches CPC. Cada llamada escribe datos en la ventana de tiempo que coincide con la marca de tiempo. El intervalo de tiempo observable total es de SIZE × WIN milisegundos. Los datos fuera de este intervalo se sobrescriben conforme llegan nuevos datos.

SIZE y WIN solo se aplican cuando la clave se crea por primera vez. Las escrituras posteriores en la misma clave utilizan los valores establecidos al momento de la creación.

Ejemplo: Para rastrear eventos únicos por minuto durante los últimos 10 minutos, establezca SIZE en 10 y WIN en 60000. Cuando llegan datos del minuto 11, los datos del primer minuto se sobrescriben.

Sintaxis

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

Complejidad temporal: O(1)

Parámetros

Parámetro

Descripción

key

La clave de matriz de TairCpc que se actualizará.

timestamp

Marca de tiempo UNIX en milisegundos que indica en qué ventana de tiempo se escribirá.

item

El elemento que se agregará.

EX time

Tiempo de expiración relativo en segundos. La clave no expira si se omite.

EXAT time

Tiempo de expiración absoluto como marca de tiempo UNIX en segundos. La clave no expira si se omite.

PX time

Tiempo de expiración relativo en milisegundos. La clave no expira si se omite.

PXAT time

Tiempo de expiración absoluto como marca de tiempo UNIX en milisegundos. La clave no expira si se omite.

SIZE size

Número de ventanas de tiempo. Valor predeterminado: 10. Rango válido: 1–1000. Mantenga este valor por debajo de 120 para cargas de trabajo típicas.

WIN window_length

Duración de cada ventana de tiempo en milisegundos. Valor predeterminado: 60000 (1 minuto).

Valor devuelto

  • OK en caso de éxito.

  • Un mensaje de error en caso contrario.

Ejemplo

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

CPC.ARRAY.ESTIMATE

Devuelve la estimación de cardinalidad para la ventana de tiempo correspondiente a la marca de tiempo indicada.

Sintaxis

CPC.ARRAY.ESTIMATE key timestamp

Complejidad temporal: O(1)

Parámetros

Parámetro

Descripción

key

La clave de matriz de TairCpc que se consultará.

timestamp

Marca de tiempo UNIX en milisegundos que identifica la ventana de tiempo a consultar.

Valor devuelto

  • La estimación de cardinalidad para la ventana de tiempo correspondiente, en caso de éxito.

  • Un mensaje de error en caso contrario.

Ejemplo

CPC.ARRAY.ESTIMATE foo 1645584532000
"2"

CPC.ARRAY.ESTIMATE.RANGE

Devuelve estimaciones de cardinalidad por ventana para todas las ventanas de tiempo dentro de un intervalo especificado (intervalo cerrado). Cada valor en la respuesta corresponde a una ventana de tiempo.

Sintaxis

CPC.ARRAY.ESTIMATE.RANGE key start_time end_time

Complejidad temporal: O(1)

Parámetros

Parámetro

Descripción

key

La clave de matriz de TairCpc que se consultará.

start_time

Inicio del intervalo de tiempo como marca de tiempo UNIX en milisegundos.

end_time

Fin del intervalo de tiempo como marca de tiempo UNIX en milisegundos.

Valor devuelto

  • Una lista de estimaciones de cardinalidad, una por cada ventana de tiempo en el intervalo, en caso de éxito.

  • Un mensaje de error en caso contrario.

Ejemplo

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

CPC.ARRAY.ESTIMATE.RANGE.MERGE

Devuelve una única estimación de cardinalidad fusionada y deduplicada, que agrega N ventanas de tiempo a partir de la marca de tiempo indicada y en sentido retrospectivo.

Utilice este comando cuando necesite un conteo único unificado a través de varias ventanas de tiempo —por ejemplo, el total de usuarios únicos en los últimos 5 minutos— en lugar de conteos por ventana individual.

Sintaxis

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

Complejidad temporal: O(1)

Parámetros

Parámetro

Descripción

key

La clave de matriz de TairCpc que se consultará.

timestamp

Punto de inicio de la consulta como marca de tiempo UNIX en milisegundos.

range

Número de ventanas de tiempo para fusionar, contando hacia atrás desde la marca de tiempo.

Valor devuelto

  • La estimación de cardinalidad fusionada y deduplicada, en caso de éxito.

  • Un mensaje de error en caso contrario.

Ejemplo

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

CPC.ARRAY.UPDATE2EST

Agrega un elemento a la ventana de tiempo correspondiente a la marca de tiempo indicada y devuelve la estimación de cardinalidad actualizada para esa ventana en un solo ciclo de solicitud-respuesta. Crea la clave si no existe.

Utiliza los mismos parámetros de creación de claves que CPC.ARRAY.UPDATE.

Sintaxis

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

Complejidad temporal: O(1)

Parámetros

Parámetro

Descripción

key

La clave de matriz de TairCpc que se actualizará.

timestamp

Marca de tiempo UNIX en milisegundos que identifica la ventana de tiempo destino.

item

El elemento que se agregará.

EX time

Tiempo de expiración relativo en segundos. La clave no expira si se omite.

EXAT time

Tiempo de expiración absoluto como marca de tiempo UNIX en segundos. La clave no expira si se omite.

PX time

Tiempo de expiración relativo en milisegundos. La clave no expira si se omite.

PXAT time

Tiempo de expiración absoluto como marca de tiempo UNIX en milisegundos. La clave no expira si se omite.

SIZE size

Número de ventanas de tiempo. Valor predeterminado: 10. Rango válido: 1–1000. Mantenga este valor por debajo de 120 para cargas de trabajo típicas.

WIN window_length

Duración de cada ventana de tiempo en milisegundos. Valor predeterminado: 60000 (1 minuto).

Valor devuelto

  • La estimación de cardinalidad DOUBLE actualizada para la ventana de tiempo, en caso de éxito.

  • Un mensaje de error en caso contrario.

Ejemplo

CPC.ARRAY.UPDATE2EST foo 1645584530000 f3
"3"

CPC.ARRAY.UPDATE2JUD

Agrega un elemento a la ventana de tiempo correspondiente a la marca de tiempo indicada y devuelve tanto la estimación de cardinalidad actualizada como la diferencia respecto a la estimación anterior para esa ventana. Crea la clave si no existe.

  • Si se devuelve una diferencia de 1, el elemento era nuevo (sin duplicados en esta ventana).

  • Si se devuelve una diferencia de 0, el elemento ya existía en esta ventana.

Utiliza los mismos parámetros de creación de claves que CPC.ARRAY.UPDATE.

Sintaxis

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

Complejidad temporal: O(1)

Parámetros

Parámetro

Descripción

key

La clave de matriz de TairCpc que se actualizará.

timestamp

Marca de tiempo UNIX en milisegundos que identifica la ventana de tiempo destino.

item

El elemento que se agregará.

EX time

Tiempo de expiración relativo en segundos. La clave no expira si se omite.

EXAT time

Tiempo de expiración absoluto como marca de tiempo UNIX en segundos. La clave no expira si se omite.

PX time

Tiempo de expiración relativo en milisegundos. La clave no expira si se omite.

PXAT time

Tiempo de expiración absoluto como marca de tiempo UNIX en milisegundos. La clave no expira si se omite.

SIZE size

Número de ventanas de tiempo. Valor predeterminado: 10. Rango válido: 1–1000. Mantenga este valor por debajo de 120 para cargas de trabajo típicas.

WIN window_length

Duración de cada ventana de tiempo en milisegundos. Valor predeterminado: 60000 (1 minuto).

Valor devuelto

  • En caso de éxito: dos valores —la estimación de cardinalidad actualizada para la ventana de tiempo y luego la diferencia entre la estimación nueva y la anterior—.

  • Un mensaje de error en caso contrario.

Ejemplo

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