Redis中HyperLogLog的使用小結(jié)
Redis 的 HyperLogLog 是一種概率性數(shù)據(jù)結(jié)構(gòu),用于統(tǒng)計(jì)唯一元素的數(shù)量(基數(shù)),比如你想知道一個(gè)網(wǎng)站有多少獨(dú)立訪問用戶(UV)。它的主要優(yōu)點(diǎn)是:內(nèi)存占用極小,無論你添加多少數(shù)據(jù),它通常只占用 12KB 的內(nèi)存。
下面是 HyperLogLog 的詳細(xì)講解:
?? 一、HyperLogLog 是什么?
HyperLogLog 是一種基數(shù)估計(jì)算法,它可以用來估算一個(gè)集合中不同元素的數(shù)量(Cardinality)。和 Set 不同,Set 會(huì)存儲(chǔ)所有元素,而 HyperLogLog 并不會(huì)保存具體的數(shù)據(jù),只保存一種統(tǒng)計(jì)狀態(tài)。
? 優(yōu)點(diǎn):可以統(tǒng)計(jì)大規(guī)模唯一元素?cái)?shù)量,內(nèi)存使用極低
? 缺點(diǎn):不是精確統(tǒng)計(jì),有誤差范圍 ±0.81%
??? 二、使用方法
1. 添加數(shù)據(jù)
PFADD key element [element ...] PFADD myloglog user1 user2 user3
2. 查詢基數(shù)
PFCOUNT key [key ...] PFCOUNT myloglog
3. 合并多個(gè) HyperLogLog
PFMERGE destkey sourcekey1 [sourcekey2 ...] PFMERGE totalLog userLog1 userLog2
?? 三、實(shí)際示例
# 添加一些用戶ID PFADD uv:20250414 user1 user2 user3 user4 user5 # 查詢今天的 UV PFCOUNT uv:20250414 # 返回 5 # 添加重復(fù)的用戶 ID(不會(huì)重復(fù)計(jì)數(shù)) PFADD uv:20250414 user1 user2 # 再查一次 PFCOUNT uv:20250414 # 仍然是 5
?? 四、原理簡(jiǎn)要(非必須了解)
HyperLogLog 基于概率算法,核心思想是:
哈希每個(gè)元素,觀察哈希值的前綴中連續(xù)0的最大長(zhǎng)度,利用這個(gè)統(tǒng)計(jì)信息估算基數(shù)。
- 哈希函數(shù)讓輸入隨機(jī)分布
- 長(zhǎng)連續(xù) 0 出現(xiàn)的概率很低,說明數(shù)據(jù)多
- Redis 將結(jié)果分散到 2^14(16,384)個(gè)桶中,提高精度
?? 五、適用場(chǎng)景
- 網(wǎng)站 UV 統(tǒng)計(jì)(每天、每小時(shí)用戶訪問數(shù))
- 活躍用戶數(shù)統(tǒng)計(jì)
- 數(shù)據(jù)去重統(tǒng)計(jì)但不需要精確結(jié)果的場(chǎng)合
?? 六、注意事項(xiàng)
- 無法獲取添加了哪些元素(它不存數(shù)據(jù))
- 是估算值(不是精確值),精度誤差為 ±0.81%
- 永遠(yuǎn)只占用約 12KB 的內(nèi)存(精確控制內(nèi)存使用)
?? 七、與 Set 對(duì)比
| 項(xiàng)目 | Set | HyperLogLog |
|---|---|---|
| 精度 | 精確 | 估算(±0.81%) |
| 內(nèi)存 | 隨數(shù)據(jù)增大 | 恒定約 12KB |
| 支持去重計(jì)數(shù) | ? | ?(基于概率) |
| 支持元素查看 | ? | ?(不存數(shù)據(jù)) |
| 使用場(chǎng)景 | 數(shù)據(jù)可控小集合 | 超大規(guī)模數(shù)據(jù)統(tǒng)計(jì) |
如果你有具體的使用場(chǎng)景或代碼需求,也可以告訴我,我可以幫你寫具體的 Redis 命令或 Python/Lua 示例。需要嗎?
到此這篇關(guān)于Redis中HyperLogLog的使用小結(jié)的文章就介紹到這了,更多相關(guān)Redis HyperLogLog使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Redis?HyperLogLog數(shù)據(jù)統(tǒng)計(jì)輕量級(jí)解決方案詳解
- Redis中?HyperLogLog數(shù)據(jù)類型使用小結(jié)
- Redis中HyperLogLog的使用詳情
- Redis如何使用HyperLogLog的實(shí)現(xiàn)
- Redis特殊數(shù)據(jù)類型HyperLogLog基數(shù)統(tǒng)計(jì)算法講解
- Redis高級(jí)數(shù)據(jù)類型Hyperloglog、Bitmap的使用
- Redis中3種特殊的數(shù)據(jù)類型(BitMap、Geo和HyperLogLog)
- Redis?HyperLogLog數(shù)據(jù)量統(tǒng)計(jì)的實(shí)現(xiàn)實(shí)例
相關(guān)文章
redis實(shí)現(xiàn)存儲(chǔ)帖子的點(diǎn)贊狀態(tài)和數(shù)量的示例代碼
使用Redis來實(shí)現(xiàn)點(diǎn)贊功能是一種高效的選擇,因?yàn)镽edis是一個(gè)內(nèi)存數(shù)據(jù)庫(kù),適用于處理高并發(fā)的數(shù)據(jù)操作,這篇文章主要介紹了redis實(shí)現(xiàn)存儲(chǔ)帖子的點(diǎn)贊狀態(tài)和數(shù)量的示例代碼,需要的朋友可以參考下2023-09-09
詳談redis優(yōu)化配置和redis.conf說明(推薦)
下面小編就為大家?guī)硪黄斦剅edis優(yōu)化配置和redis.conf說明(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-03-03
Redis MCP 客戶端應(yīng)用配置的實(shí)現(xiàn)示例
本文詳細(xì)介紹配置客戶端應(yīng)用使用Redis MCP服務(wù),客戶端配置包括自動(dòng)配置和手動(dòng)配置兩種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-11-11
redis?lua腳本解決高并發(fā)下秒殺場(chǎng)景
這篇文章主要為大家介紹了redis?lua腳本解決高并發(fā)下秒殺場(chǎng)景,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10

