Redis HyperLogLog學習記錄

說明

之前在說Redis集合數據結構的時候,我們知道集合中存儲的是互不相同的元素,它的SADD命令用來添加元素,SCARD命令用來獲取集合中元素的數量,故我們可以利用從該命令製作一個“唯一計數器”。例如記錄一個網站的ip訪問量。但是當一個網站熱度很高被大規模訪問時,我們要記錄更長時間的訪問量(例如一年),那如果再使用集合製作的唯一計數器來計數的話,將會非常的吃內存資源,且性能大幅度下降。這時我們就需要HyperLogLog幫忙了。
HyperLogLog是一種爲了計算集合的基數而創建的概率算法,它能得到一個集合的近似基數,且這個近似基數與實際基數的誤差在一個合理的範圍內。
HyperLogLog的優點在於它計算近似基數的內存並不會因爲集合的大小而改變,它進行計算所需的內存總是固定並且非常少的(實際上一個HyperLogLog只佔用12kb內存空間就可以對2^64個元素進行計數,而算法的誤差率只有0.81%)。

命令

PFADD

PFADD hyperloglog element [element ...]

對給定的一個或多個元素進行計數,若給定的所有元素已進行過計數,則命令返回0,若至少有一個未進行過計數,則命令返回1。該命令也可以用來去重(即判斷元素是否已計過數)。

PFCOUNT

PFCOUNT hyperloglog [hyperloglog ...]

得到集合的近似基數。當該命令後跟多個hyperloglog時,則得到這多個hyperloglog並集計算後的近似基數。

PFMERGE

PRMERGE destination hyperloglog [hyperloglog ...]

計算多個hyperloglog的並集,並將計算後的hyperloglog存儲到名爲destination的鍵中。實際上PFCOUNT命令內部就使用了PFMERGE命令。

總結

HyperLogLog是一種概率算法,它用來得到集合的近似基數,它主要的用法是用來計數;也可用來進行去重;它不能得到集合中的成員。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章