redis使用場景之HyperLogLog---應用於獨立信息統計

如果我們統計不重複數據的數量,比如統計獨立UV,我們會有如下方案:

原始方案:set

存儲每個用戶的id(字符串)

改進方案:bitmaps

存儲每個用戶狀態(bit)

全新的方案:HyperLogLog

基數

首先我們來認識一下基數

{1,3,5,7,5,7,8}          基數集{1,3,5,7,8}            基數:5

Hyperloglog類型的基本操作

  • 添加數據
pfadd key element [element...]
  • 統計數據
pfcount key [key...]
  • 合併數據
pfmerge destkey sourcekey [sourcekey...]

操作如下:

         

h11爲key,隨便起,001,002代表用戶id,或者可以放ip地址、人名等都可以

相關說明

  • 用於進行基數統計,不是集合,不保存數據,只記錄數量而不是具體數據
  • 核心是基數估算算法,最終數值存在一定誤差
  • 誤差範圍:基數估計得結果是一個帶有0.81%標準錯誤的近似值
  • 耗空間極小,每個hyperloglog key佔用了12k的內存用於標記基數
  • pfadd命令不是一次性分配12k內存使用,會隨着基數的增加內存逐漸增大
  • pfmerge命令合併後佔用的存儲空間爲12k,無論合併之前數據是多少

一般使用場景

統計註冊 IP 數
統計每日訪問 IP 數
統計頁面實時 UV 數
統計在線用戶數
統計用戶每天搜索不同詞條的個數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章