Tüm Ürünler
Search
Belge Merkezi

Tair (Redis® OSS-Compatible):Cpc

Son Güncelleme:Oct 03, 2026

TairCpc, sıkıştırılmış olasılık sayımı (CPC) taslağı üzerine inşa edilmiş bir veri yapısıdır. HyperLogLog (HLL) ile karşılaştırıldığında çok daha az bellek kullanarak yüksek doğrulukta kardinalite tahmini sunar; bu da onu yüksek aktarım hızına sahip veri akışlarında gerçek zamanlı yinelenen öğe eleme için ideal kılar.

Arka Plan

Gerçek zamanlı karar sistemleri iş olaylarını geldikleri anda işler, sonuçları hızlı erişim için saklar ve anında harekete geçmek üzere kuralları uygular. Düşük gecikme süresi gerektiren kardinalite sayımının kritik olduğu iki örnek aşağıda verilmiştir:

  • Kredi kartı dolandırıcılığının önlenmesi: Bir kartın şüpheli bir bağlamda kullanılıp kullanılmadığını belirleyin ve şüpheli işlemleri en erken aşamada durdurun.

  • Bilet karaborsacılığının engellenmesi: Envanteri ele geçirmeden önce sanal cihazlar ve sahte IP adresleri kullanan botları tespit edin ve engelleyin.

TairCpc, gelen verileri boyuta göre yinelemesiz hale getirmenize, taslağı bir Tair örneğinde depolamanıza ve nanosaniyeler içinde toplama sorguları çalıştırmanıza olanak tanır; böylece depolama ve hesaplama tek bir katmanda birleştirilir.

Genel Bakış

CPC bir veri akışındaki farklı değerleri sayar ve birleşik toplamı elde etmek için birden fazla taslağın birleştirilmesini destekler. CPC, HLL ile aynı doğruluğu yaklaşık %40 daha az bellek kullanarak sağlar.

TairCpc, açık kaynaklı CPC uygulamasını genişletir ve hata oranını standart CPC için %0,67 ve HLL için %1,95 iken %0.008'e düşürür.

TairCpc'yi, benzersiz öğeleri saymak için Set yapısına bellek açısından daha verimli bir alternatif olarak düşünebilirsiniz:

İşlem Set eşdeğeri TairCpc eşdeğeri
Öğe ekleme SADD key item CPC.UPDATE key item
Benzersiz öğeleri sayma SCARD key CPC.ESTIMATE key

Set'in aksine TairCpc ham öğeleri depolamaz; bunun yerine sayımı yaklaşık olarak temsil eden kompakt bir taslak saklar. Bu dengeleme, devasa ölçekte milisaniye altı toplama işlemlerini mümkün kılar.

Temel özellikler

  • Artımlı okuma ve yazma ile düşük bellek ayak izi ve minimum G/Ç

  • Yüksek performanslı, ultra yüksek doğruluklu yinelenen öğe eleme

  • Açık kaynaklı CPC için %0,67 ve HLL için %1,95 iken %0.008'e düşürülmüş hata oranı

Kullanım senaryoları

  • Banka güvenlik sistemleri: Son bir dakika içinde belirli bir eylemi gerçekleştiren kaç farklı hesap veya cihaz var?

  • Flash satışlar: Mevcut zaman aralığında bu ürünü satın almaya çalışan kaç benzersiz kullanıcı var?

  • Bilet karaborsacılığının engellenmesi: Son 10 saniye içinde bu oturumdan istek gönderen kaç farklı IP adresi var?

Ön Koşullar

Başlamadan önce örneğinizin aşağıdaki Tair serisi türlerinden biri olduğundan emin olun:

En fazla özellik ve en yüksek kararlılık için örneğinizi en son küçük sürümde tutun. Yükseltme talimatları için bkz. Örneğin küçük sürümünü güncelleme . Küme örnekleri ve okuma/yazma ayrıştırma örnekleri için de tüm komutların beklendiği gibi çalışması amacıyla proxy düğümlerini en son küçük sürüme yükseltin.

Kullanım notları

TairCpc verileri bir Tair örneğinde depolanır.

Desteklenen komutlar

Komut Sözdizimi Açıklama
CPC.UPDATE CPC.UPDATE key item [EX|EXAT|PX|PXAT time] Bir anahtara öğe ekler. Anahtar yoksa oluşturur. Öğe zaten varsa işlem yapılmaz.
CPC.ESTIMATE CPC.ESTIMATE key Bir anahtar için yinelenmeyen kardinalite tahminini DOUBLE olarak döndürür.
CPC.UPDATE2EST CPC.UPDATE2EST key item [EX|EXAT|PX|PXAT time] Bir öğe ekler ve güncellenmiş DOUBLE tahminini döndürür. Anahtar yoksa oluşturur.
CPC.UPDATE2JUD CPC.UPDATE2JUD key item [EX|EXAT|PX|PXAT time] Bir öğe ekler ve güncellenmiş tahmini artı farkı döndürür. Yinelenenleri tespit etmek için farkı kullanın: 1 = yeni öğe, 0 = yinelenen.
CPC.ARRAY.UPDATE CPC.ARRAY.UPDATE key timestamp item [EX|EXAT|PX|PXAT time] [SIZE size] [WIN window_length] Belirtilen zaman damgasına karşılık gelen zaman penceresine bir öğe ekler.
CPC.ARRAY.ESTIMATE CPC.ARRAY.ESTIMATE key timestamp Belirtilen zaman damgasına karşılık gelen zaman penceresi için kardinalite tahminini döndürür.
CPC.ARRAY.ESTIMATE.RANGE CPC.ARRAY.ESTIMATE.RANGE key start_time end_time Bir zaman aralığında (kapalı aralık) pencere başına kardinalite tahminlerini döndürür.
CPC.ARRAY.ESTIMATE.RANGE.MERGE CPC.ARRAY.ESTIMATE.RANGE.MERGE key timestamp range Bir zaman damgasından başlayarak geriye doğru N zaman penceresini kapsayan birleştirilmiş, yinelenmeyen tahmini döndürür.
CPC.ARRAY.UPDATE2EST CPC.ARRAY.UPDATE2EST key timestamp item [EX|EXAT|PX|PXAT time] [SIZE size] [WIN window_length] Bir öğeyi bir zaman penceresine ekler ve o pencere için güncellenmiş tahmini döndürür.
CPC.ARRAY.UPDATE2JUD CPC.ARRAY.UPDATE2JUD key timestamp item [EX|EXAT|PX|PXAT time] [SIZE size] [WIN window_length] Bir öğeyi bir zaman penceresine ekler ve o pencere için güncellenmiş tahmini ve farkı döndürür.
DEL DEL key [key ...] Bir veya daha fazla TairCpc anahtarını siler.

Sözdizimi kuralları

  • BÜYÜK HARF: komut anahtar sözcüğü

  • _italik_: değişken

  • [seçenek]: isteğe bağlı parametre

  • A|B: birbirini dışlayan seçenekler — yalnızca birini belirtin

  • ...: önceki parametre tekrarlanabilir

CPC.UPDATE

Bir TairCpc anahtarına öğe ekler. Anahtar yoksa oluşturur. Öğe zaten varsa komut işlem yapmaz.

Sözdizimi

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

Zaman karmaşıklığı O(1)

Parametreler

Parametre Açıklama
key Güncellenecek TairCpc anahtarı.
item Eklenecek öğe.
EX time Saniye cinsinden göreli sona erme süresi. Belirtilmezse anahtarın süresi dolmaz.
EXAT time Saniye cinsinden UNIX zaman damgası olarak mutlak sona erme süresi. Belirtilmezse anahtarın süresi dolmaz.
PX time Milisaniye cinsinden göreli sona erme süresi. Belirtilmezse anahtarın süresi dolmaz.
PXAT time Milisaniye cinsinden UNIX zaman damgası olarak mutlak sona erme süresi. Belirtilmezse anahtarın süresi dolmaz.

Dönüş değeri

  • Başarılı olursa OK.

  • Diğer durumlarda bir hata mesajı.

Örnek

CPC.UPDATE foo f1 EX 3600
OK

CPC.ESTIMATE

Yinelenen öğeler elendikten sonra bir TairCpc anahtarının kardinalite tahminini döndürür. Dönüş değeri bir DOUBLE'dur; kullanılabilir bir sayım için en yakın tam sayıya yuvarlayın.

Sözdizimi

CPC.ESTIMATE key

Zaman karmaşıklığı: O(1)

Parametreler

Parametre Açıklama
key Sorgulanacak TairCpc anahtarı.

Dönüş değeri

  • Başarılı olursa DOUBLE türünde kardinalite tahmini.

  • Diğer durumlarda bir hata mesajı.

Örnek

CPC.ESTIMATE foo
"19.000027716212127"

CPC.UPDATE2EST

Tek bir gidiş-dönüşte bir TairCpc anahtarına öğe ekler ve güncellenmiş kardinalite tahminini döndürür. Anahtar yoksa oluşturur.

Sözdizimi

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

Zaman karmaşıklığı: O(1)

Parametreler

Parametre Açıklama
key Güncellenecek TairCpc anahtarı.
item Eklenecek öğe.
EX time Saniye cinsinden göreli sona erme süresi. Belirtilmezse anahtarın süresi dolmaz.
EXAT time Saniye cinsinden UNIX zaman damgası olarak mutlak sona erme süresi. Belirtilmezse anahtarın süresi dolmaz.
PX time Milisaniye cinsinden göreli sona erme süresi. Belirtilmezse anahtarın süresi dolmaz.
PXAT time Milisaniye cinsinden UNIX zaman damgası olarak mutlak sona erme süresi. Belirtilmezse anahtarın süresi dolmaz.

Dönüş değeri

  • Başarılı olursa güncellemeden sonraki DOUBLE türünde kardinalite tahmini.

  • Diğer durumlarda bir hata mesajı.

Örnek

CPC.UPDATE2EST foo f3
"3.0000004768373003"

CPC.UPDATE2JUD

Bir TairCpc anahtarına öğe ekler ve hem güncellenmiş kardinalite tahminini hem de önceki tahminden farkı döndürür. Ayrı bir okuma komutu olmadan öğenin yeni mi yoksa zaten var mı olduğunu belirlemek için farkı kullanın.

  • 1 farkı döndürülürse öğe yenidir (yinelenen yok).

  • 0 farkı döndürülürse öğe zaten vardır (yinelenen algılandı).

Anahtar yoksa oluşturur.

Sözdizimi

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

Zaman karmaşıklığı: O(1)

Parametreler

Parametre Açıklama
key Güncellenecek TairCpc anahtarı.
item Eklenecek öğe.
EX time Saniye cinsinden göreli sona erme süresi. Belirtilmezse anahtarın süresi dolmaz.
EXAT time Saniye cinsinden UNIX zaman damgası olarak mutlak sona erme süresi. Belirtilmezse anahtarın süresi dolmaz.
PX time Milisaniye cinsinden göreli sona erme süresi. Belirtilmezse anahtarın süresi dolmaz.
PXAT time Milisaniye cinsinden UNIX zaman damgası olarak mutlak sona erme süresi. Belirtilmezse anahtarın süresi dolmaz.

Dönüş değeri

  • Başarılı olursa: iki DOUBLE değeri — yeni kardinalite tahmini, ardından yeni ve önceki tahminler arasındaki fark.

  • Diğer durumlarda bir hata mesajı.

Örnek

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

CPC.ARRAY.UPDATE

Belirtilen zaman damgasının düştüğü zaman penceresi içinde bir TairCpc dizi anahtarına öğe ekler. Anahtar yoksa oluşturur.

Bir TairCpc dizi anahtarı, CPC taslaklarından oluşan kayan bir pencereyi korur. Her çağrı, zaman damgasına karşılık gelen zaman penceresine veri yazar. Toplam gözlemlenebilir zaman aralığı SIZE × WIN milisaniyedir. Bu aralığın dışındaki veriler, yeni veriler geldiğinde üzerine yazılır.

SIZE ve WIN yalnızca anahtar ilk oluşturulduğunda uygulanır. Aynı anahtara yapılan sonraki yazma işlemleri, oluşturma sırasında ayarlanan değerleri kullanır.

Örnek: Son 10 dakika içindeki dakika başına benzersiz olayları izlemek için SIZE değerini 10 ve WIN değerini 60000 olarak ayarlayın. 11. dakikadan veri geldiğinde ilk dakikanın verisi üzerine yazılır.

Sözdizimi

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

Zaman karmaşıklığı: O(1)

Parametreler

Parametre Açıklama
key Güncellenecek TairCpc dizi anahtarı.
timestamp Hangi zaman penceresine yazılacağını belirten milisaniye cinsinden UNIX zaman damgası.
item Eklenecek öğe.
EX time Saniye cinsinden göreli sona erme süresi. Belirtilmezse anahtarın süresi dolmaz.
EXAT time Saniye cinsinden UNIX zaman damgası olarak mutlak sona erme süresi. Belirtilmezse anahtarın süresi dolmaz.
PX time Milisaniye cinsinden göreli sona erme süresi. Belirtilmezse anahtarın süresi dolmaz.
PXAT time Milisaniye cinsinden UNIX zaman damgası olarak mutlak sona erme süresi. Belirtilmezse anahtarın süresi dolmaz.
SIZE size Zaman penceresi sayısı. Varsayılan: 10. Geçerli aralık: 1–1000. Tipik iş yükleri için 120'nin altında tutun.
WIN window_length Her bir zaman penceresinin milisaniye cinsinden uzunluğu. Varsayılan: 60000 (1 dakika).

Dönüş değeri

  • Başarılı olursa OK.

  • Diğer durumlarda bir hata mesajı.

Örnek

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

CPC.ARRAY.ESTIMATE

Belirtilen zaman damgasının düştüğü zaman penceresi için kardinalite tahminini döndürür.

Sözdizimi

CPC.ARRAY.ESTIMATE key timestamp

Zaman karmaşıklığı: O(1)

Parametreler

Parametre Açıklama
key Sorgulanacak TairCpc dizi anahtarı.
timestamp Sorgulanacak zaman penceresini belirleyen milisaniye cinsinden UNIX zaman damgası.

Dönüş değeri

  • Başarılı olursa eşleşen zaman penceresi için kardinalite tahmini.

  • Diğer durumlarda bir hata mesajı.

Örnek

CPC.ARRAY.ESTIMATE foo 1645584532000
"2"

CPC.ARRAY.ESTIMATE.RANGE

Belirtilen bir zaman aralığındaki (kapalı aralık) tüm zaman pencereleri için pencere başına kardinalite tahminlerini döndürür. Yanıttaki her değer bir zaman penceresine karşılık gelir.

Sözdizimi

CPC.ARRAY.ESTIMATE.RANGE key start_time end_time

Zaman karmaşıklığı: O(1)

Parametreler

Parametre Açıklama
key Sorgulanacak TairCpc dizi anahtarı.
start_time Milisaniye cinsinden UNIX zaman damgası olarak zaman aralığının başlangıcı.
end_time Milisaniye cinsinden UNIX zaman damgası olarak zaman aralığının bitişi.

Dönüş değeri

  • Başarılı olursa aralıktaki her zaman penceresi için birer tane olmak üzere kardinalite tahminlerinin listesi.

  • Diğer durumlarda bir hata mesajı.

Örnek

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

CPC.ARRAY.ESTIMATE.RANGE.MERGE

Belirtilen zaman damgasından başlayarak geriye doğru N zaman penceresini birleştirerek tek bir birleştirilmiş ve yinelenmeyen kardinalite tahmini döndürür.

Pencere başına sayılar yerine birden fazla zaman penceresinde birleştirilmiş benzersiz bir sayıma ihtiyaç duyduğunuzda bu komutu kullanın; örneğin, son 5 dakikadaki toplam benzersiz kullanıcı sayısı.

Sözdizimi

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

Zaman karmaşıklığı: O(1)

Parametreler

Parametre Açıklama
key Sorgulanacak TairCpc dizi anahtarı.
timestamp Milisaniye cinsinden UNIX zaman damgası olarak sorgunun başlangıç noktası.
range Zaman damgasından geriye doğru sayılan birleştirilecek zaman penceresi sayısı.

Dönüş değeri

  • Başarılı olursa birleştirilmiş, yinelenmeyen kardinalite tahmini.

  • Diğer durumlarda bir hata mesajı.

Örnek

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

CPC.ARRAY.UPDATE2EST

Belirtilen zaman damgasına karşılık gelen zaman penceresine bir öğe ekler ve tek bir gidiş-dönüşte o pencere için güncellenmiş kardinalite tahminini döndürür. Anahtar yoksa oluşturur.

CPC.ARRAY.UPDATE ile aynı anahtar oluşturma parametrelerini kullanır.

Sözdizimi

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

Zaman karmaşıklığı: O(1)

Parametreler

Parametre Açıklama
key Güncellenecek TairCpc dizi anahtarı.
timestamp Hedef zaman penceresini belirleyen milisaniye cinsinden UNIX zaman damgası.
item Eklenecek öğe.
EX time Saniye cinsinden göreli sona erme süresi. Belirtilmezse anahtarın süresi dolmaz.
EXAT time Saniye cinsinden UNIX zaman damgası olarak mutlak sona erme süresi. Belirtilmezse anahtarın süresi dolmaz.
PX time Milisaniye cinsinden göreli sona erme süresi. Belirtilmezse anahtarın süresi dolmaz.
PXAT time Milisaniye cinsinden UNIX zaman damgası olarak mutlak sona erme süresi. Belirtilmezse anahtarın süresi dolmaz.
SIZE size Zaman penceresi sayısı. Varsayılan: 10. Geçerli aralık: 1–1000. Tipik iş yükleri için 120'nin altında tutun.
WIN window_length Her bir zaman penceresinin milisaniye cinsinden uzunluğu. Varsayılan: 60000 (1 dakika).

Dönüş değeri

  • Başarılı olursa zaman penceresi için güncellenmiş DOUBLE kardinalite tahmini.

  • Diğer durumlarda bir hata mesajı.

Örnek

CPC.ARRAY.UPDATE2EST foo 1645584530000 f3
"3"

CPC.ARRAY.UPDATE2JUD

Belirtilen zaman damgasına karşılık gelen zaman penceresine bir öğe ekler ve hem güncellenmiş kardinalite tahminini hem de o pencere için önceki tahminden farkı döndürür. Anahtar yoksa oluşturur.

  • 1 farkı döndürülürse öğe yenidir (bu pencerede yinelenen yok).

  • 0 farkı döndürülürse öğe bu pencerede zaten vardır.

CPC.ARRAY.UPDATE ile aynı anahtar oluşturma parametrelerini kullanır.

Sözdizimi

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

Zaman karmaşıklığı: O(1)

Parametreler

Parametre Açıklama
key Güncellenecek TairCpc dizi anahtarı.
timestamp Hedef zaman penceresini belirleyen milisaniye cinsinden UNIX zaman damgası.
item Eklenecek öğe.
EX time Saniye cinsinden göreli sona erme süresi. Belirtilmezse anahtarın süresi dolmaz.
EXAT time Saniye cinsinden UNIX zaman damgası olarak mutlak sona erme süresi. Belirtilmezse anahtarın süresi dolmaz.
PX time Milisaniye cinsinden göreli sona erme süresi. Belirtilmezse anahtarın süresi dolmaz.
PXAT time Milisaniye cinsinden UNIX zaman damgası olarak mutlak sona erme süresi. Belirtilmezse anahtarın süresi dolmaz.
SIZE size Zaman penceresi sayısı. Varsayılan: 10. Geçerli aralık: 1–1000. Tipik iş yükleri için 120'nin altında tutun.
WIN window_length Her bir zaman penceresinin milisaniye cinsinden uzunluğu. Varsayılan: 60000 (1 dakika).

Dönüş değeri

  • Başarılı olursa: iki değer — zaman penceresi için güncellenmiş kardinalite tahmini, ardından yeni ve önceki tahminler arasındaki fark.

  • Diğer durumlarda bir hata mesajı.

Örnek

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