本文作者沒有設置VIP可見,并首發在我的博客:https://blog.liuzijian.com/post/redis-data-structure-hyperloglog.html
目錄
- 1.概述
- 2.常用命令
- 2.1 添加元素
- 2.2 返回基數估算值
- 2.3 合并hyperloglog
- 3.總結
1.概述
基數統計是一種去重復統計功能的基數估計算法,HyperLogLog是用來做基數統計的數據結構,HyperLogLog的優點是,在輸入元素的數量或者體積非常非常大時,計算基數所需的空間總是固定且是很小的。
在Redis里面,每個HyperLogLog鍵只需要花費12KB內存,就可以計算接近2??個不同元素的基數,這和計算基數時,元素越多耗費內存就越多的集合形成鮮明對比。
但是,因為HyperLogLog只會根據輸入元素來計算基數,而不會儲存輸入元素本身,所以HyperLogLog不能像集合那樣,返回輸入的各個元素。
去重類似Java的HashSet,只是不能存儲數據
2.常用命令
2.1 添加元素
PFADD key element [element ..]
例
127.0.0.1:6379> pfadd pf1 1 2 3 4 5 6 5 4 5 6 7 34 2 5 6 4
(integer) 1
127.0.0.1:6379> pfadd pf2 1 2 3 4 5 6 5 4 43 4 21 65 32 54
(integer) 1
hyperloglog本質上是string
127.0.0.1:6379> type pf1
string
2.2 返回基數估算值
PFCOUNT key [key....]
例:去重后只有8個元素
127.0.0.1:6379> PFCOUNT pf1
(integer) 8
2.3 合并hyperloglog
合并到新的destkey中
PFMERGE destkey sourcekey [sourcekey...]
例:合并pf1和pf2為pfm
127.0.0.1:6379> PFMERGE pfm pf1 pf2
OK
127.0.0.1:6379> pfcount pfm
(integer) 13
3.總結
使用場景:
1.網站UV統計,文章閱讀數UV統計