[Redis6]新数据类型_HyperLogLog
HyperLogLog
簡介
在工作當中,我們經常會遇到與統計相關的功能需求,比如統計網站PV(PageView頁面訪問量),可以使用Redis的incr、incrby輕松實現。
但像UV(UniqueVisitor,獨立訪客)、獨立IP數、搜索記錄數等需要去重和計數的問題如何解決?這種求集合中不重復元素個數的問題稱為基數問題。
解決基數問題有很多種方案:
(1)數據存儲在MySQL表中,使用distinct count計算不重復個數
(2)使用Redis提供的hash、set、bitmaps等數據結構來處理
以上的方案結果精確,但隨著數據不斷增加,導致占用空間越來越大,對于非常大的數據集是不切實際的。
能否能夠降低一定的精度來平衡存儲空間?Redis推出了HyperLogLog
Redis HyperLogLog 是用來做基數統計的算法,HyperLogLog 的優點是,在輸入元素的數量或者體積非常非常大時,計算基數所需的空間總是固定的、并且是很小的。
在 Redis 里面,每個 HyperLogLog 鍵只需要花費 12 KB 內存,就可以計算接近 2^64 個不同元素的基數。這和計算基數時,元素越多耗費內存就越多的集合形成鮮明對比。
但是,因為 HyperLogLog 只會根據輸入元素來計算基數,而不會儲存輸入元素本身,所以 HyperLogLog 不能像集合那樣,返回輸入的各個元素。
什么是基數?
比如數據集 {1, 3, 5, 7, 5, 7, 8}, 那么這個數據集的基數集為 {1, 3, 5 ,7, 8}, 基數(不重復元素)為5。 基數估計就是在誤差可接受的范圍內,快速計算基數。
命令
pfadd
(1)格式
pfadd [key][element] [element …] 添加指定元素到 HyperLogLog 中
pfcount
(1)格式
pfcount[key] [key …] 計算HLL的近似基數,可以計算多個HLL,比如用HLL存儲每天的UV,計算一周的UV可以使用7天的UV合并計算即可
pfmerge
(1)格式
pfmerge [sourcekey …] 將一個或多個HLL合并后的結果存儲在另一個HLL中,比如每月活躍用戶可以使用每天的活躍用戶來合并計算可得
總結
以上是生活随笔為你收集整理的[Redis6]新数据类型_HyperLogLog的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Redis6]Bitmaps与set对
- 下一篇: 推荐一款神级动态壁纸电脑软件电脑上好用的