一、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。 基数估计就是在误差可接受的范围内,快速计算基数。

二、命令

1、pfadd

  (1)格式

pfadd <key>< element> [element ...]   添加指定元素到 HyperLogLog 中

        

  (2)实例

    

 

   将所有元素添加到指定HyperLogLog数据结构中。如果执行命令后HLL估计的近似基数发生变化,则返回1,否则返回0。

2、pfcount

  (1)格式

pfcount<key> [key ...] 计算HLL的近似基数,可以计算多个HLL,比如用HLL存储每天的UV,计算一周的UV可以使用7天的UV合并计算即可

    

      模拟计算一周的UV:

    

  (2)实例

    

3、pfmerge

  (1)格式

pfmerge<destkey><sourcekey> [sourcekey ...]  将一个或多个HLL合并后的结果存储在另一个HLL中,比如每月活跃用户可以使用每天的活跃用户来合并计算可得

       

  (2)实例

    

Redis6:第六章:(2)Redis6 新数据类型:HyperLogLog相关推荐

  1. 第六章 电磁新理论(修补章)

                    第六章       电磁新理论(修补章)         关于麦克斯韦方程中的散度式的证明,网上资料很多,也较为简单.所以,本章只是对麦克斯韦方程中的旋度式做逻辑推导, ...

  2. Redis6通信协议升级至RESP3,一口气看完13种新数据类型

    我们已经知道RESP V2版本协议的规范,RESP的全程是Redis Serialization Protocol,基于这个实现简单且解析性能优秀的通信协议,Redis的服务端与客户端可以通过底层命令 ...

  3. Redis6发布订阅及Redis新数据类型

    Redis6 Redis的发布和订阅 什么是发布和订阅 Redis的发布和订阅 发布订阅命令行实现 Redis新数据类型 Bitmaps 常用命令 1.setbit 2.实例 3. getbit 4. ...

  4. Java基础学习——第十六章 Java8新特性

    Java基础学习--第十六章 Java8 新特性 Java8(JDK8.0)较 JDK7.0 有很多变化或者说是优化,比如 interface 里可以有静态方法和默认方法,并且可以有方法体,这一点就颠 ...

  5. 第六章 电磁新理论

                         第六章       电磁新理论   声明        本人自称:三空道士.可看作是社会底层的无业游民,也无不妥.虽修行于俗世,甘于过平淡艰苦的隐居生活,但从 ...

  6. 【正点原子FPGA连载】第五十六章 双目OV5640摄像头HDMI显示实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1

    1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 3)全套实验源码+手册+视频下载地址:ht ...

  7. 【正点原子FPGA连载】第四十六章SD卡读写测试实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1

    1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:ht ...

  8. 人工智能:第六章 专家系统

    第六章专家系统 教学内容:本章主要介绍专家系统的定义.结构.特点和类型,分析了基于规则的专家系统.基于框架的专家系统和基于模型的专家系统,归纳了协同式和分布式等新型专家系统,并结合实例介绍了专家系统的 ...

  9. C语言数据结构(大话数据结构——笔记4)第六章:树

    文章目录 第六章:树(tree.root.subtree)(177) 树的定义(179) 结点分类(结点的度degree.叶结点leaf[终端结点].分支结点[非终端节点]{内部结点}.树的度)(18 ...

  10. 【译】 WebSocket 协议第六章——发送与接收消息(Sending and Receiving Data)

    概述 本文为 WebSocket 协议的第六章,本文翻译的主要内容为 WebSocket 消息发送与接收相关内容. 发送与接收消息(协议正文) 6.1 发送数据 为了通过 WebSocket 连接发送 ...

最新文章

  1. mysql 新建库在哪找_求助,mysql创建数据库找不到文件在哪问题
  2. neo4j 机器学习_neo4j(图数据库)是什么?
  3. 微信公众平台开发环境搭建
  4. 【编程6】贪吃蛇游戏(python+pygame)
  5. VTK:可视化之DrawText
  6. java随机数生成(固定位数)
  7. opencv中 .at<uchar>()和.ptr<uchar>()使用方法的区别
  8. python编程(fabric部署)
  9. resetlog oracle,用RMAN的全备恢复resetlog之前的数据
  10. 使c语言程序变成流程图的软件6,下载_AutoFlowchart(C语言流程图生成器) V3.5.3 英文版_6z6z下载站...
  11. java 生成 流程图_几行代码生成流程图
  12. 整理12种电脑有趣屏保
  13. VMware增强型键盘驱动程序
  14. matlab量化股票基本面,获取数据 - MATLAB - 掘金量化
  15. 推荐几款不错的企业网站,前端设计师寻求设计灵感!
  16. 多边形的定义为什么要强调封闭图形_多边形的定义及其定理
  17. Web基础知识与常用技术
  18. 【圣诞快乐】闻到圣诞的气息了,喜欢的节日在慢慢来临~祝大家Merry Christmas。
  19. 函数(python)
  20. 最大流——最大传输量

热门文章

  1. ITSM基础框架开发维护指南
  2. R语言:基本变量及其之间关系探索分析
  3. 海量数据荣获华为“中国政企数据存储优秀合作伙伴”金奖
  4. 黑暗城堡(dijkstra算法)
  5. Linux命令之杀掉被占用的端口号
  6. linux xsh加密传输,WBB - 解决Xshell迁移/同步xsh文件时,ssh秘钥密码/密码丢失问题...
  7. Macintosh30周年回顾视频 ---转自36kr
  8. 模型调参(二):learning rate decay(学习率衰减)【使用库调整学习率:等间隔、多间隔、指数衰减、余弦退火函数、根据指标、自定义】【手动调整学习率】
  9. 网站打开速度过慢时该怎么提高?
  10. 计算机网络的雏形为,计算机网络的发展雏形是什么