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过期事件实现订单超时取消
May 08 Redis
SpringBoot 集成Redis 过程
Jun 02 Redis
嵌入式Redis服务器在Spring Boot测试中的使用教程
Jul 21 Redis
Redis字典实现、Hash键冲突及渐进式rehash详解
Sep 04 Redis
Window server中安装Redis的超详细教程
Nov 17 Redis
CentOS8.4安装Redis6.2.6的详细过程
Nov 20 Redis
Redis命令处理过程源码解析
Feb 12 Redis
面试分析分布式架构Redis热点key大Value解决方案
Mar 13 Redis
redis数据一致性的实现示例
Mar 18 Redis
Redis监控工具RedisInsight安装与使用
Mar 21 Redis
Redis官方可视化工具RedisInsight安装使用教程
Apr 19 Redis
浅谈Redis缓冲区机制
Jun 05 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
Windows PHP5和Apache的安装与配置
2009/06/08 PHP
ajax+php打造进度条代码[readyState各状态说明]
2010/04/12 PHP
php使用COPY函数更新配置文件的方法
2015/06/18 PHP
php文件类型MIME对照表(比较全)
2016/10/07 PHP
PHP Header用于页面跳转时的几个注意事项
2016/10/21 PHP
又一个小巧的图片预加载类
2007/05/05 Javascript
原生js实现查找/添加/删除/指定元素的class
2013/04/12 Javascript
jQuery prev ~ siblings选择器使用介绍
2013/08/09 Javascript
jQuery实现的调整表格行tr上下顺序
2016/01/10 Javascript
js简单判断移动端系统的方法
2016/02/25 Javascript
JQuery实现简单的服务器轮询效果实例
2016/03/31 Javascript
基于JSON格式数据的简单jQuery幻灯片插件(jquery-slider)
2016/08/10 Javascript
jQuery动态改变多行文本框高度的方法
2016/09/07 Javascript
用Nodejs搭建服务器访问html、css、JS等静态资源文件
2017/04/28 NodeJs
为你的微信小程序体积瘦身详解
2017/05/20 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
解决vue-cli webpack打包开启Gzip 报错问题
2019/07/24 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
2019/08/27 Javascript
python使用urllib2模块获取gravatar头像实例
2013/12/18 Python
Python实现多并发访问网站功能示例
2017/06/19 Python
Django自定义过滤器定义与用法示例
2018/03/22 Python
详解python中的lambda与sorted函数
2020/09/04 Python
python和node.js生成当前时间戳的示例
2020/09/29 Python
基于html5 canvas实现漫天飞雪效果实例
2014/09/10 HTML / CSS
Crocs美国官方网站:卡骆驰洞洞鞋
2017/08/04 全球购物
说出你对remoting 和webservice的理解和应用
2014/06/08 面试题
Linux如何为某个操作添加别名
2013/03/01 面试题
J2EE是技术还是平台还是框架
2016/08/14 面试题
饲料采购员岗位职责
2013/12/19 职场文书
班主任与学生安全责任书
2014/07/25 职场文书
2014年学校工作总结
2014/11/20 职场文书
幼儿园教师考核评语
2014/12/31 职场文书
springboot中rabbitmq实现消息可靠性机制详解
2021/09/25 Java/Android
Android自定义ScrollView实现阻尼回弹
2022/04/01 Java/Android
Redis超详细讲解高可用主从复制基础与哨兵模式方案
2022/04/07 Redis
flex布局中使用flex-wrap实现换行的项目实践
2022/06/21 HTML / CSS