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 哨兵集群的实现
Jun 18 Redis
redis cluster支持pipeline的实现思路
Jun 23 Redis
浅谈Redis位图(Bitmap)及Redis二进制中的问题
Jul 15 Redis
Redis如何实现分布式锁
Aug 23 Redis
基于Redis结合SpringBoot的秒杀案例详解
Oct 05 Redis
CentOS8.4安装Redis6.2.6的详细过程
Nov 20 Redis
Redis如何使用乐观锁(CAS)保证数据一致性
Mar 25 Redis
redis sentinel监控高可用集群实现的配置步骤
Apr 01 Redis
Redis实战高并发之扣减库存项目
Apr 14 Redis
windows安装 redis 6.2.6最新步骤详解
Apr 26 Redis
浅谈Redis的事件驱动模型
May 30 Redis
Redis过期数据是否会被立马删除
Jul 23 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 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
2014/06/12 PHP
跟我学Laravel之路由
2014/10/15 PHP
PHP实用函数分享之去除多余的0
2015/02/06 PHP
php使用glob函数遍历文件和目录详解
2016/09/23 PHP
PHP工厂模式简单实现方法示例
2018/05/23 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
2018/10/15 PHP
详解PHP中的8个魔术常量
2020/07/06 PHP
Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
2010/06/11 Javascript
利用js实现选项卡的特别效果的实例
2013/03/03 Javascript
javaScript array(数组)使用字符串作为数组下标的方法
2013/11/19 Javascript
jQuery拖拽div实现思路
2014/02/19 Javascript
JS+CSS实现六级网站导航主菜单效果
2015/09/28 Javascript
Java遍历集合方法分析(实现原理、算法性能、适用场合)
2016/04/25 Javascript
AngularJS基础 ng-if 指令用法
2016/08/01 Javascript
Javascript中浏览器窗口的基本操作总结
2016/08/18 Javascript
jQGrid动态填充select下拉框的选项值(动态填充)
2016/11/28 Javascript
jquery 追加元素append、prepend、before、after用法与区别分析
2016/12/02 Javascript
简单实现JS计算器功能
2016/12/21 Javascript
JS简单判断滚动条的滚动方向实现方法
2017/04/28 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
vue实现固定位置显示功能
2019/05/30 Javascript
利用Electron简单撸一个Markdown编辑器的方法
2019/06/10 Javascript
javascript实现的时间格式加8小时功能示例
2019/06/13 Javascript
python中的lambda表达式用法详解
2016/06/22 Python
Python实现的多线程http压力测试代码
2017/02/08 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
2018/02/03 Python
python制作mysql数据迁移脚本
2019/01/01 Python
Python实现DDos攻击实例详解
2019/02/02 Python
python中if及if-else如何使用
2020/06/02 Python
详解css3中的伪类before和after常见用法
2020/11/17 HTML / CSS
Javascript 高级手势使用介绍
2013/04/21 HTML / CSS
英国评分最高的女性剃须刀订阅盒:FFS Beauty
2018/01/25 全球购物
小学运动会入场式解说词
2014/02/18 职场文书
小学教师年度个人总结
2015/02/05 职场文书
《活见鬼》教学反思
2016/02/24 职场文书
Golang标准库syscall详解(什么是系统调用)
2021/05/25 Golang