我命由我,不由天!


  • 搜索
prometheus docker golang linux kubernetes

redis-HyperLogLog(五)

发表于 2021-05-29 | 0 | 阅读次数 189

HyperLogLog

提供不精确的去重计算方案,虽然不精确,但也不是非常离谱,标准误差是0.81%

案例

统计PV

给每个网页配一个独立的redis计数器,把这个计数器的key后缀加上当天的日期。这样来一个请求,执行incrby指令一次,最终就可以统计出所有的PV数据

统计UV:同一个用户一天之内的多次访问请求只能计数一次。

简单方法:为每一个页面设置一个独立的set集合存储当天访问过此页面的用户ID。当一个请求过来时,使用sadd将用户ID塞进去就可以,通过scard取集合的大小,就是页面UV数据

但如果集合过大,会浪费存储空间,使用hyperloglog

使用方法

HyperLogLog提供了两个指令pfadd和pfcount,一个增加计数,一个获取计数,pfmerge 合并两个

pfadd codehole user1
pfcount codehole
pfmerge code codehole1 codehole2

HyperLogLog 在计数较小时,存储空间采用稀疏矩阵存储,空间占用很小,在计数慢慢变大、稀疏矩阵占用空间渐渐超出阈值,才一次性转为稠密矩阵,才会占用12KB的空间

原理

略

  • 本文作者: Dante
  • 本文链接: https://gaodongfei.com/archives/redis-hyperloglog
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
redis-位图(四)
redis-布隆过滤器(六)
  • 文章目录
  • 站点概览
Dante

Dante

119 日志
5 分类
5 标签
RSS
Creative Commons
0%
© 2023 Dante
由 Halo 强力驱动
|
主题 - NexT.Pisces v5.1.4
沪ICP备2020033702号