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 相关文章推荐
为Java项目添加Redis缓存的方法
May 18 Redis
详解Redis基本命令与使用场景
Jun 01 Redis
redis requires ruby version2.2.2的解决方案
Jul 15 Redis
基于Redis的List实现特价商品列表功能
Aug 30 Redis
Redis字典实现、Hash键冲突及渐进式rehash详解
Sep 04 Redis
Springboot/Springcloud项目集成redis进行存取的过程解析
Dec 04 Redis
Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
Feb 12 Redis
分布式Redis Cluster集群搭建与Redis基本用法
Feb 24 Redis
redis复制有可能碰到的问题汇总
Apr 03 Redis
Grafana可视化监控系统结合SpringBoot使用
Apr 19 Redis
Redis基本数据类型String常用操作命令
Jun 01 Redis
Redis sentinel哨兵集群的实现步骤
Jul 15 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微信公众开发之获取周边酒店信息的方法
2014/12/22 PHP
Symfony2实现在doctrine中内置数据的方法
2016/02/05 PHP
YII视图整合kindeditor扩展的方法
2016/07/13 PHP
Laravel利用gulp如何构建前端资源详解
2018/06/03 PHP
PDO::query讲解
2019/01/29 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
2020/11/23 PHP
IE7提供XMLHttpRequest对象为兼容
2007/03/08 Javascript
表单(FORM)的一些实用效果代码
2007/03/25 Javascript
对采用动态原型方式无法展示继承机制得思考
2009/12/04 Javascript
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
2012/04/12 Javascript
html a标签-超链接中confirm方法使用介绍
2013/01/04 Javascript
JS在TextArea光标位置插入文字并实现移动光标到文字末尾
2013/06/21 Javascript
公共js在页面底部加载的注意事项介绍
2013/07/18 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
js和C# 时间日期格式转换的简单实例
2016/05/28 Javascript
jquery 判断div show的状态实例
2016/12/03 Javascript
利用js定义一个导航条菜单
2017/03/14 Javascript
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
JavaScript栈和队列相关操作与实现方法详解
2018/12/07 Javascript
Vue 实现前进刷新后退不刷新的效果
2019/06/14 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
2020/02/26 Javascript
基于element-ui封装表单金额输入框的方法示例
2021/01/06 Javascript
python类定义的讲解
2013/11/01 Python
零基础写python爬虫之urllib2中的两个重要概念:Openers和Handlers
2014/11/05 Python
使用Python神器对付12306变态验证码
2016/01/05 Python
在PyCharm下使用 ipython 交互式编程的方法
2019/01/17 Python
Python使用paramiko操作linux的方法讲解
2019/02/25 Python
python控制nao机器人身体动作实例详解
2019/04/29 Python
html5在移动端的屏幕适应问题示例探讨
2014/06/15 HTML / CSS
六一儿童节活动总结
2014/08/27 职场文书
美术教师求职信范文
2015/03/20 职场文书
2015年办公室个人工作总结
2015/04/20 职场文书
劳动模范获奖感言
2015/07/31 职场文书
党员干部学习十八届五中全会精神心得体会
2016/01/05 职场文书
护士医德医风心得体会
2016/01/25 职场文书
Python+Appium新手教程
2021/04/17 Python