Redis 三種特殊資料型別之 Hyperloglog

HuDu發表於2020-09-18

什麼是基數

A{1,3,5,7,8,9,7}
B{1,3,5,7,8}
基數(不重複的元素)=5,可以接受誤差!

簡介

Redis 2.8.9版本就更新了 Hyperloglog 資料結構!
Redis Hyperloglog 基數統計的演算法!
優點:佔用的記憶體是固定的,2<sup>64</sup>不同的元素的基數,只需要廢12KB記憶體!如果要從記憶體角度來比較的話 Hyperloglog首選!
網頁的PV(一個人訪問一個網站多次,但是還是算作一個人)
傳統的方式,set儲存使用者的id,然後就可以統計set 中的元素數量作為判斷標準
這個方式如果儲存了大量的使用者id,就會比較麻煩!我們的目的是為了計數,而不是為了儲存使用者id;
0.81%的錯誤率!統計PV任務,可以忽略不記

測試

127.0.0.1:6379[1]> PFADD mykey a b c d e f g h i j    # 建立第一組元素 mykey
(integer) 1
127.0.0.1:6379[1]> PFCOUNT mykey    # 統計 mykey 的基數數量
(integer) 10
127.0.0.1:6379[1]> PFADD mykey2 i j z x c v b n m
(integer) 1
127.0.0.1:6379[1]> PFCOUNT mykey2
(integer) 9
127.0.0.1:6379[1]> PFMERGE mykey3 mykey mykey2    # 合併兩組mykey mykey2 => mykey3 並集
OK
127.0.0.1:6379[1]> PFCOUNT mykey3
(integer) 15

如果允許容錯,一定可以使用 Hyperloglog
如果不允許容錯,就使用set或者自己的資料型別即可

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章