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