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配置文件中常用配置详解
Apr 14 Redis
redis限流的实际应用
Apr 24 Redis
使用redis实现延迟通知功能(Redis过期键通知)
Sep 04 Redis
使用redis生成唯一编号及原理示例详解
Sep 15 Redis
详解redis在微服务领域的贡献
Oct 16 Redis
Redis之RedisTemplate配置方式(序列和反序列化)
Mar 13 Redis
源码分析Redis中 set 和 sorted set 的使用方法
Mar 22 Redis
Redis keys命令的具体使用
Jun 05 Redis
Redis唯一ID生成器的实现
Jul 07 Redis
redis lua限流算法实现示例
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 和 XML: 使用expat函数(三)
2006/10/09 PHP
php实现监控varnish缓存服务器的状态
2014/12/30 PHP
php使用Jpgraph绘制柱形图的方法
2015/06/10 PHP
JS 拼图游戏 面向对象,注释完整。
2009/06/18 Javascript
JavaScript strike方法入门实例(给字符串加上删除线)
2014/10/17 Javascript
详解JavaScript ES6中的Generator
2015/07/28 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
2015/08/06 Javascript
Google 地图API资料整理及详细介绍
2016/08/06 Javascript
JS实现点击Radio动态更新table数据
2017/07/18 Javascript
解决React Native端口号修改的方法
2017/07/28 Javascript
Express使用html模板的详细代码
2017/09/18 Javascript
JavaScript获取用户所在城市及地理位置
2018/04/21 Javascript
浅析Vue 和微信小程序的区别、比较
2018/08/03 Javascript
详解三种方式解决vue中v-html元素中标签样式
2018/11/22 Javascript
Nuxt.js 静态资源和打包的操作
2020/11/06 Javascript
js实现类选择器和name属性选择器的示例步骤
2021/02/07 Javascript
python中的对象拷贝示例 python引用传递
2014/01/23 Python
在Python的Flask框架中使用模版的入门教程
2015/04/20 Python
Python的dict字典结构操作方法学习笔记
2016/05/07 Python
Python实现的圆形绘制(画圆)示例
2018/01/31 Python
Pandas库之DataFrame使用的学习笔记
2019/06/21 Python
python模块和包的应用BASE_PATH使用解析
2019/12/14 Python
Python文件操作函数用法实例详解
2019/12/24 Python
Python pip安装模块提示错误解决方案
2020/05/22 Python
基于python实现计算两组数据P值
2020/07/10 Python
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
EJB的角色和三个对象
2015/12/31 面试题
志愿者服务感言
2014/02/27 职场文书
小学生作文评语
2014/04/18 职场文书
保证书格式范文
2014/04/28 职场文书
警察先进个人事迹材料
2014/05/16 职场文书
合同和协议有什么区别?
2014/10/08 职场文书
介绍信格式样本
2015/05/05 职场文书
国富论读书笔记
2015/06/26 职场文书
2016年“六一儿童节”校园广播稿
2015/12/17 职场文书
十大最强格斗系宝可梦,超梦X仅排第十,第二最重格斗礼仪
2022/03/18 日漫