標籤:
HyperLogLog資料結構簡介
可以看http://www.cnblogs.com/ysuzhaixuefei/p/4052110.html 部落格,介紹的相對比較清晰。
HyperLogLog資料結構,可以接收多個參數輸入,然後估算出元素的基數。
? 基數:集合中不同元素的數量。比如 {‘apple‘, ‘banana‘, ‘cherry‘, ‘banana‘, ‘apple‘} 的基數就是 3 。
? 估算值:演算法給出的基數並不是精確的,可能會比實際稍微多一些或者稍微少一些,但會控制在合
理的範圍之內。
HyperLogLog 的優點是,即使輸入元素的數量或者體積非常非常大,計算基數所需的空間總是固定
的、並且是很小的。
在 Redis 裡面,每個 HyperLogLog 鍵只需要花費 12 KB 記憶體,就可以計算接近 2^64 個不同元素的基
數。這和計算基數時,元素越多耗費記憶體就越多的集合形成鮮明對比。
但是,因為 HyperLogLog 只會根據輸入元素來計算基數,而不會儲存輸入元素本身,所以
HyperLogLog 不能像集合那樣,返回輸入的各個元素。
PFADD key [element ...]:將任意數量的元素添加到指定的HyperLogLog中去。相對會更新HyperLogLog內部,更改集合的基數。如果對應的HyperLogLog的基數發生變化則返回1,否則返回0。
返回值:基數被修改返回1,否則返回0
127.0.0.1:6379> PFADD databases Redis Mongodb MySQL
(integer) 1
127.0.0.1:6379> PFCOUNT databases
(integer) 3
127.0.0.1:6379> PFADD databases Redis
(integer) 0
127.0.0.1:6379> PFADD databases RedisTest
(integer) 1
127.0.0.1:6379> PFCOUNT databases
(integer) 4
PFCOUNT key[key ... ]:PFCOUNT作用於單個key的時候,返回該key的基數。當PFCOUNT命令作用於多個key時,返回並集的近似數。
返回值:給定hyperLogLog的基數。
PFMERGE destkey sourcekey[sorcekey ...]:將多個HyperLogLog合并為一個HyperLogLog,合并後 的HyperLogLog的基數接近於所有輸入的可見集合的並集。合并得出的hyperLogLog會被儲存到destkey中去。
返回值:成功返回ok。
127.0.0.1:6379> PFADD nosql Redis MongoDB Memcache
(integer) 1
127.0.0.1:6379> PFADD rdbms mysql mssql oracle
(integer) 1
127.0.0.1:6379> PFMERGE databases nosql rdbms
OK
127.0.0.1:6379> PFCOUNT databases
(integer) 9
Redis命令-HyperLogLog