深入Redis学习教程之Hyperloglog算法

作者 : IT 大叔 本文共807个字,预计阅读时间需要3分钟 发布时间: 2020-10-20

HyperLogLog

基于Hyperloglog算法,可以以极小的空间完成独立数据统计。其本质还是字符串

命令:
pfadd key element ...   # 向hyperloglog添加一个或多个元素
pfcount key ...     # 计算hyperloglog的不重复的元素总数
pfmerge destkey k1 k2 ...   # 合并多个hyperloglog赋给destkey

实战场景:
计算每一天的网站的独立访客数量(用户重复进入网站不算)
方案:使用hyperloglog,以日期为key,一天建立一个hyperloglog来记录独立访客。用户每访问一次网页就往里面添加用户的id。可以往这个key中添加重复的用户id,但是pfcount只会计算不重复值的个数。

添加
pfadd date:20200101 u1 u100 u439 ...

计算一天的独立访客数
pfcount date:20200101

计算一周的独立访客数
pfcount date:20200101 date:20200102 ... date:20200107

如果一天有100万的独立用户访问网站,则一个hyperloglog只消耗15K的内存,一个月450K,一年才5M。

hyperloglog与set、bitmap的区别和比较:
hyperloglog消耗内存极小,但是它只能计算key中独立元素个数,不能取出里面的元素或者查看key中是否有某个元素。

所以想获取某个用户在某一天是否登陆就办不到的,而set和bitmap都是可以办到的。

hyperloglog有一定的错误率,例如往pfadd添加100万个不同元素(请勿用一条pfadd添加100万个元素),上面计算出来的元素个数为1009839

相比于单纯的字符串型 incr 来计算用户访问的区别是:
两者都先用很小的空间但
incr 不能计算独立用户访问数,只能计算用户总访问数(包括刷新页面也计算在内),而hyperloglog可以。

免责声明:
1. 本站资源转自互联网,源码资源分享仅供交流学习,下载后切勿用于商业用途,否则开发者追究责任与本站无关!
2. 本站使用「署名 4.0 国际」创作协议,可自由转载、引用,但需署名原版权作者且注明文章出处
3. 未登录无法下载,登录使用金币下载所有资源。
IT小站 » 深入Redis学习教程之Hyperloglog算法

常见问题FAQ

没有金币/金币不足 怎么办?
本站已开通每日签到送金币,每日签到赠送五枚金币,金币可累积。
所有资源普通会员都能下载吗?
本站所有资源普通会员都可以下载,需要消耗金币下载的白金会员资源,通过每日签到,即可获取免费金币,金币可累积使用。

发表评论