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 12 Redis
深入理解redis中multi与pipeline
Jun 02 Redis
浅谈Redis位图(Bitmap)及Redis二进制中的问题
Jul 15 Redis
详解redis在微服务领域的贡献
Oct 16 Redis
SpringBoot集成Redis的思路详解
Oct 16 Redis
linux下安装redis图文详细步骤
Dec 04 Redis
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
Feb 12 Redis
Redis中有序集合的内部实现方式的详细介绍
Mar 16 Redis
redis击穿 雪崩 穿透超详细解决方案梳理
Mar 17 Redis
Redis集群节点通信过程/原理流程分析
Mar 18 Redis
基于Redis6.2.6版本部署Redis Cluster集群的问题
Apr 01 Redis
浅谈Redis变慢的原因及排查方法
Jun 21 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
从MySQL数据库表中取出随机数据的代码
2007/09/05 PHP
PHP开发规范手册之PHP代码规范详解
2011/01/13 PHP
PHP获取数组中某元素的位置及array_keys函数应用
2013/01/29 PHP
PHP中使用匿名函数操作数据库的例子
2014/11/17 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
2016/02/26 PHP
Laravel实现自定义错误输出内容的方法
2016/10/10 PHP
PHP设计模式之PHP迭代器模式讲解
2019/03/22 PHP
IE和Firefox在JavaScript应用中的兼容性探讨
2008/04/01 Javascript
javascript call和apply方法
2008/11/24 Javascript
js bind 函数 使用闭包保存执行上下文
2011/12/26 Javascript
jQuery插件开发全解析
2012/10/10 Javascript
Extjs单独定义各组件的实例代码
2013/06/25 Javascript
jquery中的工具使用方法$.isFunction, $.isArray(), $.isWindow()
2015/08/09 Javascript
node.js的http.createServer过程深入解析
2019/06/06 Javascript
JavaScript事件委托实现原理及优点进行
2020/08/29 Javascript
vue实现一个矩形标记区域(rectangle marker)的方法
2020/10/28 Javascript
js实现简易计算器小功能
2020/11/18 Javascript
[06:04]DOTA2国际邀请赛纪录片:Just For LGD
2013/08/11 DOTA
[01:12]DOTA2 2015年秋季互动指南
2015/11/10 DOTA
基于python的字节编译详解
2017/09/20 Python
浅谈Django自定义模板标签template_tags的用处
2017/12/20 Python
解决Pycharm下面出现No R interpreter defined的问题
2018/10/29 Python
使用python读取.text文件特定行的数据方法
2019/01/28 Python
Django框架模板的使用方法示例
2019/05/25 Python
Django项目创建到启动详解(最全最详细)
2019/09/07 Python
详解HTML5 data-* 自定义属性
2018/01/24 HTML / CSS
海外淘书首选:AbeBooks
2017/07/31 全球购物
FitFlop美国官网:英国符合人体工学的鞋类品牌
2018/10/05 全球购物
个性化皮包、小袋、生活配件:Mon Purse
2019/03/26 全球购物
2015年学生会工作总结范文
2015/03/31 职场文书
2015年化妆品销售工作总结
2015/05/11 职场文书
悬崖上的金鱼姬观后感
2015/06/15 职场文书
高三英语教学反思
2016/03/03 职场文书
2019最新婚庆对联集锦!
2019/07/10 职场文书
详细谈谈JavaScript中循环之间的差异
2021/08/23 Javascript
Docker安装MySql8并远程访问的实现
2022/07/07 Servers