Redis特殊数据类型HyperLogLog基数统计算法讲解


Posted in Redis onJune 01, 2022

Redis HyperLogLog基数统计

HyperLogLog 是用来做基数统计的算法。

先了解下什么是基数。

比如数据集{1, 3, 5, 7, 5, 7, 8},那么这个数据集的基数集为{1, 3, 5 ,7, 8},基数(不重复元素)为5。

如果,现在需要统计一下网页的UV,那么就会涉及到去重了,这种场景就很适合用HyperLogLog。

这不就是set集合嘛?我用set来得出不重复的元素也可以呀。

没错,是可以,但是当数据量非常大的时候,你这个set是不是会占用非常大的内存呢?
如果用HyperLogLog来处理就好了,因为它计算基数所需要的空间是一定的,只要12kb,就可以计算接近 2^64 个不同元素的基数。

但是注意在这个数量级下,是会存在0.81%的错误率的,所以说具体还得看业务是否可以接受这样的错误率。
像上面说的统计UV的场景,这点错误率是可以忽略的。

一、pfadd

将所有元素参数添加到 HyperLogLog 数据结构中。

pfadd mypf 1 2 3 a b c 3 4 5 c d a

Redis特殊数据类型HyperLogLog基数统计算法讲解

二、pfcount

返回给定 HyperLogLog 的基数估算值。

pfcount mypf

可以看到,返回的是9,也就是不重复的元素数量有9个。

Redis特殊数据类型HyperLogLog基数统计算法讲解

三、pfmerge

将多个 HyperLogLog 合并为一个 HyperLogLog ,合并后的 HyperLogLog 的基数估算值是通过对所有 给定 HyperLogLog 进行并集计算得出的。

pfmerge mypftotal mypf3 mypf4

mypf3、mypf4合并到mypftotal 上。

Redis特殊数据类型HyperLogLog基数统计算法讲解

以上就是Redis特殊数据类型HyperLogLog基数统计算法讲解的详细内容,更多关于Redis HyperLogLog基数统计的资料请关注三水点靠木其它相关文章!


Tags in this post...

Redis 相关文章推荐
浅谈Redis在直播场景的实践方案
Apr 27 Redis
浅谈Redis存储数据类型及存取值方法
May 08 Redis
详解缓存穿透击穿雪崩解决方案
May 28 Redis
浅谈Redis主从复制以及主从复制原理
May 29 Redis
Redis基于Bitmap实现用户签到功能
Jun 20 Redis
redis requires ruby version2.2.2的解决方案
Jul 15 Redis
Redis中一个String类型引发的惨案
Jul 25 Redis
Redis集群新增、删除节点以及动态增加内存的方法
Sep 04 Redis
关于使用Redisson订阅数问题
Jan 18 Redis
Redis如何使用乐观锁(CAS)保证数据一致性
Mar 25 Redis
Redis超详细讲解高可用主从复制基础与哨兵模式方案
Apr 07 Redis
Redis实战高并发之扣减库存项目
Apr 14 Redis
Redis特殊数据类型bitmap位图
Jun 01 #Redis
浅谈Redis的事件驱动模型
May 30 #Redis
Redis 异步机制
Redis 报错 error:NOAUTH Authentication required
解决 redis 无法远程连接
Redis 限流器
May 15 #Redis
Redis高并发缓存架构性能优化
You might like
PHP中的strtr函数使用介绍(str_replace)
2011/10/20 PHP
PHP两种去掉数组重复值的方法比较
2014/06/19 PHP
PHP中spl_autoload_register()函数用法实例详解
2016/07/18 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
2016/10/17 PHP
php_pdo 预处理语句详解
2016/11/21 PHP
PHP手机短信验证码实现流程详解
2018/05/17 PHP
Yii 框架入口脚本示例分析
2020/05/19 PHP
Javascript 实用小技巧
2010/04/07 Javascript
JavaScript window.location对象
2014/11/14 Javascript
javascript实现行拖动的方法
2015/05/27 Javascript
基于JavaScript如何制作遮罩层对话框
2016/01/26 Javascript
使用jquery给指定的table动态添加一行、删除一行
2016/10/13 Javascript
原生javascript实现的ajax异步封装功能示例
2016/11/03 Javascript
浅谈angularjs $http提交数据探索
2017/01/20 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
Python之父谈Python的未来形式
2016/07/01 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
Python pygorithm模块用法示例【常见算法测试】
2018/08/16 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
2018/09/03 Python
解决Python print输出不换行没空格的问题
2018/11/14 Python
Python选择网卡发包及接收数据包
2019/04/04 Python
flask框架url与重定向操作实例详解
2020/01/25 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
2020/06/15 Python
Django前后端分离csrf token获取方式
2020/12/25 Python
详解CSS3中nth-child与nth-of-type的区别
2017/01/05 HTML / CSS
网上常见的一份Linux面试题(多项选择部分)
2015/02/07 面试题
同步和异步有何异同,在什么情况下分别使用他们?
2012/12/28 面试题
出国留学担保书
2014/05/20 职场文书
临床专业自荐信
2014/06/22 职场文书
个人作风建设剖析材料
2014/10/11 职场文书
2015年新学期寄语
2015/02/26 职场文书
2015年银行大堂经理工作总结
2015/04/24 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书
导游词之江南园林狮子林
2019/09/16 职场文书
asyncio异步编程之Task对象详解
2022/03/13 Python