redis基礎之HyperLogLog資料結構
一、概述:
Redis 在 2.8.9 版本添加了HyperLogLog 結構。
RedisHyperLogLog 是用來做基數統計的演算法,HyperLogLog 的優點是,在輸入元素的數量或者體積非常非常大時,計算基數所需的空間總是固定的、並且是很小的。
在 Redis 裡面,每個 HyperLogLog 鍵只需要花費 12 KB 記憶體,就可以計算接近 2^64 個不同元素的基數。這和計算基數時,元素越多耗費記憶體就越多的集合形成鮮明對比。
但是,因為 HyperLogLog 只會根據輸入元素來計算基數,而不會儲存輸入元素本身,所以 HyperLogLog 不能像集合那樣,返回輸入的各個元素。
二、什麼是基數?
比如資料集 {1, 3, 5, 7, 5,7, 8},那麼這個資料集的基數集為 {1, 3, 5 ,7, 8}, 基數(不重複元素)為5。基數估計就是在誤差可接受的範圍內,快速計算基數。
三、相關命令列表:
命令原型 |
時間複雜度 |
命令描述 |
返回值 |
O(1) |
新增指定元素到 HyperLogLog 中。 |
如果至少1個 HyperLogLog傳送變更,否則返回0。 |
|
O(1)—O(N) |
返回給定 HyperLogLog 的基數估算值。 |
返回通過PFADD增加的唯一元素的近似數。 |
四、命令示例:
redis> PFADD hll a b c d e f g
(integer) 1
redis> PFCOUNT hll
(integer) 7
redis> PFADD hll foo bar zap
(integer) 1
redis> PFADD hll zap zap zap
(integer) 0
redis> PFADD hll foo bar
(integer) 0
redis> PFCOUNT hll
(integer) 3
redis> PFADD some-other-hll 1 2 3
(integer) 1
redis> PFCOUNT hll some-other-hll
(integer) 6
redis> PFADD hll1 foo bar zap a
(integer) 1
redis> PFADD hll2 a b c foo
(integer) 1
redis> PFMERGE hll3 hll1 hll2
OK
redis> PFCOUNT hll3
(integer) 6
redis>
五、應用範圍:
這個資料結構的一個例子是由統計使用者在一個搜尋表單中的每一天進行的獨特的查詢數。
六、命令操作
訪問網站:http://try.redis.io/,然後進行命令操作;