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 相关文章推荐
详解RedisTemplate下Redis分布式锁引发的系列问题
Apr 27 Redis
Redis IP地址的绑定的实现
May 08 Redis
redis三种高可用方式部署的实现
May 11 Redis
基于Redis实现分布式锁的方法(lua脚本版)
May 12 Redis
浅谈redis缓存在项目中的使用
May 20 Redis
redis客户端实现高可用读写分离的方式详解
Jul 04 Redis
使用Redis做预定库存缓存功能
Apr 02 Redis
浅谈Redis 中的过期删除策略和内存淘汰机制
Apr 03 Redis
解决 Redis 秒杀超卖场景的高并发
Apr 12 Redis
Redis数据同步之redis shake的实现方法
Apr 21 Redis
Redis基本数据类型Set常用操作命令
Jun 01 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程序
2006/10/09 PHP
mac下使用brew配置环境的步骤分享
2011/05/23 PHP
PHP生成图片验证码功能示例
2017/01/12 PHP
PHP+JQUERY操作JSON实例
2017/03/23 PHP
php微信开发之谷歌测距
2018/06/14 PHP
JS 操作符整理[推荐收藏]
2011/11/15 Javascript
基于jquery的文章中所有图片width大小批量设置方法
2013/08/01 Javascript
jquery mobile页面跳转后样式丢失js失效的解决方法
2014/09/06 Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
2015/07/03 Javascript
jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法
2015/11/23 Javascript
jQuery使用模式窗口实现在主页面和子页面中互相传值的方法
2016/03/01 Javascript
jquery 标签 隔若干行加空白或者加虚线的方法
2016/12/07 Javascript
细说webpack源码之compile流程-rules参数处理技巧(2)
2017/12/26 Javascript
vscode下vue项目中eslint的使用方法
2019/01/13 Javascript
layer.prompt使文本框为空的情况下也能点击确定的方法
2019/09/24 Javascript
vue-socket.io跨域问题有效解决方法
2020/02/11 Javascript
Vue路由 重定向和别名的区别说明
2020/09/09 Javascript
微信小程序实现底部弹出框
2020/11/18 Javascript
python解析html开发库pyquery使用方法
2014/02/07 Python
Pycharm学习教程(4) Python解释器的相关配置
2017/05/03 Python
Python中垃圾回收和del语句详解
2018/11/15 Python
Python图像的增强处理操作示例【基于ImageEnhance类】
2019/01/03 Python
python实现整数的二进制循环移位
2019/03/08 Python
Python解释器及PyCharm工具安装过程
2020/02/26 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
2020/05/09 Python
python 如何使用find和find_all爬虫、找文本的实现
2020/10/16 Python
全球知名提供各类营养保健品的零售商:Vitamin Shoppe
2016/10/09 全球购物
物业管理计划书
2014/01/10 职场文书
单位人事专员介绍信
2014/01/11 职场文书
人事主管岗位职责
2014/01/30 职场文书
服务承诺书怎么写
2014/05/24 职场文书
学校党的群众路线教育实践活动整改措施
2014/10/25 职场文书
学生会干部任命书
2015/09/21 职场文书
大学组织委员竞选稿
2015/11/21 职场文书
如何在python中实现ECDSA你知道吗
2021/11/23 Python
python lambda 表达式形式分析
2022/04/03 Python