一、概念
1、redis在2.8.9版本添加了HyperLogLog結構。
2、redis HyperLogLog是用來做基數統計的算法,HyperLogLog的優點是:在輸入元素的數量或者體積非常非常大時,計算基數所需的空間總是固定的、並且使很小的。
3、在redis里面,每個HyperLogLog鍵只需要花費12kb內存,就可以計算接近2^64個不同元素的基數。這和計算基數時,元素越多耗費內存就越多的集合形成鮮明對比。
4、但是,因為HyperLogLog只會根據輸入元素來計算基數,而不會存儲輸入元素本身,所以HyperLogLog不能像集合那樣,返回輸入的各個元素。
什么是基數
比如數據集{1,3,5,7,5,7,8},那么這個數據集的基數集為{1,3,5,7,8},基數(不重復元素)為5.基數估計就是在誤差可接受的范圍內,快速計算基數。
二、HyperLogLog相關命令
- 命令名稱:pfadd
- 語法:pfadd key element [element……]
- 功能:
- 將任意數量的元素添加到指定的HyperLogLog里面。
- 作為這個命令的副作用,HyperLogLog內部可能會被更新,以便反映一個不同的唯一元素估計數量(也即是集合的基數)。
- 返回值:
- 整數回復:如果HyperLogLog的內部儲存被修改了,那么返回1,否則返回0.
- 命令名稱:pfcount
- 語法:pfcount key [key……]
- 功能:
- 當pfcount命令作用於當個鍵時,返回儲存在給定鍵的HyperLogLog的近似基數,如果鍵不存在,那么返回0。
- 當pfcount命令作用於多個鍵時,返回所有給定HyperLogLog的並集的近似基數,這個近似基數是通過將所有給定HyperLogLog合並至一個臨時HyperLogLog來計算得出的。
- 返回值:
- 整數回復:給定HyperLogLog包含的唯一元素的近似數量。
- 命令名稱:pfmerge
- 語法:pfmerge destkey sourcekey [sourcekey……]
- 功能:
- 將多個HyperLogLog合並(merge)為一個HyperLogLog,合並后的HyperLogLog的基數接近於所有輸入HyperLogLog的可見集合(observed set)的並集。
- 返回值:
- 返回OK