簡介:
HyperLogLog是redis在2.8.9版本添加的一種新的結構。
Redis-HyperLogLog是用來做基數統計的算法,其最大的優點就是:在輸入元素的數量或者體積非常非常大的時候,計算基數需要的空間總是固定的,並且很小。在redis中,每一個HyperLogLog只需要12KB內存,就可以計算接近2^64個不同元素的基數,這與元素越多耗費內存越大的集合形成了一個鮮明的對比。但是HyperLogLog只會根據輸入元素來計算基數,不會存儲輸入元素本身,所以HyperLogLog不能和集合一樣,返回輸入的各個元素。
什么是基數?基數就是一個數據集中元素個數(重復元素只算一個)。
命令介紹:
1)pfadd
可用版本: >=2.8.9
時間復雜度: 每添加一個元素復雜度為O(1)
命令格式: pfadd key element [element ...]
作用:
將任意數量的元素添加到指定的HyperLogLog中。(HyperLogLog內部可能會被更新,以便反映一個不同唯一元素估計數量,即集合基數)
返回值:
如果HyperLogLog估計的近似基數在命令執行之后出現了變化,返回1,不然返回0。
注意:
如果指定HyperLogLog不存在的話,默認原始值為一個空HyperLogLog結構。
可以沒有element參數,表示只是創建一個空的HyperLogLog結構。創建成功返回1。
2)pfcount
可用版本: >=2.8.9
時間復雜度: O(N),N為指定HyperLogLog的個數
命令格式: pfcount key [key ...]
作用:
獲取所有給定HyperLogLog的並集的近似基數,這個近似基數帶有0.81%標准錯誤的近似值。
返回值:
返回所有給定HyperLogLog的並集的近似基數,只有一個key的話,就是這個key的近似基數,如果這一個key也不存在的話,返回0。
3)pfmerge
可用版本: >=2.8.9
時間復雜度: O(N),N為被合並的HyperLogLog數量
命令格式: pfmerge destkey sourcekey [sourcekey ...]
作用:
將多個HyperLogLog合並成一個,合並之后得到的HyperLogLog保存在destkey中,如果不存在的話,就會創建它。
返回值:
返回OK