前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis:19---常用功能之(HyperLogLog)

Redis:19---常用功能之(HyperLogLog)

作者头像
用户3479834
发布2021-02-03 14:25:34
5280
发布2021-02-03 14:25:34
举报
文章被收录于专栏:游戏开发司机

一、HyperLogLog概述

  • HyperLogLog并不是一种新的数据结构(实际类型为字符串类型),而是一种基数算法,通过HyperLogLog可以利用极小的内存空间完成独立总数的统计,数据集可以是IP、Email、ID等
  • HyperLogLog提供了3个命令:pfadd、pfcount、pfmerge

二、添加(pfadd)

代码语言:javascript
复制
pfadd key element [element …]
  • pfadd用于向HyperLogLog添加元素,如果添加成功返回1
  • 例如:下面向一个名为2016_06_06:unique:ids的hyperloglog中添加4个元素

三、计算独立用户数(pfcount)

代码语言:javascript
复制
pfcount key [key …]
  • pfcount用于计算一个或多个HyperLogLog的独立总数
  • 例如:接着上面的演示案例,2016_03_06:unique:ids的独立总数为4:

内存节省效果演示案例

  • ①插入前使用info memory查看一下内存占用率
  • ②下面建立一个名为test.sh的脚本,执行该脚本,向key为2016_05_01:unique:ids的HyperLogLog中插入100万个元素(循环每次插入1000条)
代码语言:javascript
复制
elements=""key="2016_05_01:unique:ids"for i in `seq 1 1000000`doelements="${elements} uuid-"${i}if [[ $((i%1000)) == 0 ]];thenredis-cli pfadd ${key} ${elements}elements=""fidone
  • ③执行完脚本之后,再次查看内存,发现内存只增加了14K左右
  • ④但是,使用pfcount查看结果,发现执行的结果并不止100万个
  • ⑤现在改为使用集合类型进行测试,那么可以看到内存使用率在脚本执行完之后涨到了几十MB,但是独立用户数为100万
代码语言:javascript
复制
elements=""key="2016_05_01:unique:ids:set"for i in `seq 1 1000000`doelements="${elements} "${i}if [[ $((i%1000)) == 0 ]];thenredis-cli sadd ${key} ${elements}elements=""fidone
  • 下图列出了使用集合类型和HperLogLog统计百万级用户的占用空间对比:

数据类型

1天

1月

1年

集合类型

80M

2.4G

28G

HperLogLog

15K

450K

5M

  • 可以看到,HyperLogLog内存占用量小得惊人,但是用如此小空间来估算如此巨大的数据,必然不是100%的正确,其中一定存在误差率。Redis官方给出的数字是0.81%的失误率

四、合并(pfmerge)

代码语言:javascript
复制
pfmerge destkey sourcekey [sourcekey ...]
  • pfmerge可以求出多个HyperLogLog的并集并赋值给destkey
  • 例如:要计算 2016年3月5日和3月6日的访问独立用户数,可以按照如下方式来执行,可以看到最终独立用户数是7:

五、HyperLogLog优缺点与使用建议

  • HyperLogLog内存占用量非常小,但是存在错误率
  • 开发者在进行数据结构选型时只需要确认如下两条即可:
    • 只为了计算独立总数,不需要获取单条数据
    • 可以容忍一定误差率,毕竟HyperLogLog在内存的占用量上有很大的优势
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 游戏开发司机 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、HyperLogLog概述
  • 二、添加(pfadd)
  • 三、计算独立用户数(pfcount)
    • 内存节省效果演示案例
    • 四、合并(pfmerge)
    • 五、HyperLogLog优缺点与使用建议
    相关产品与服务
    云数据库 Redis®
    腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档