首页 > 其他 > 详细

Redis三种特殊数据类型——Hyperloglog

时间:2020-08-29 19:06:47      阅读:64      评论:0      收藏:0      [点我收藏+]

redis三种特殊类型——Hyperloglog

什么是基数?

基数:一个数据集中不重复的元素。

A: {1, 3, 5, 7, 9, 7}

B: {1, 3, 5, 7, 9}

基数(不重复的元素)=5,可以接受误差

Hyperloglog简介

Redis tribution 2.8.9版本就更新了Hyperloglog数据结构。

Redis Hyperloglog 是基数统计的算法。

场景:

统计网页的UV(即Unique Visitor,不重复访客,访问量,一个人访问某个网站多次,但是还是只计算为一次)。

  • 传统方式

    • 使用set来保存用户的id,然后就可以统计set中元素数量作为标准来判断(在高并发的场景可能会有误差)。如果网站访问量大,用户id比较长,而且用户比较多,那么就增加网络资源的消耗,且会降低查询效率。
    • 我们的目的是为了计数,而不是保存用户id
  • Hyperloglog

    • 占用内存是固定的,2^64不同元素的基数,只需要12kb内存。
    • 官方说法,使用该方法的错误率是0.81%,对于统计UV任务来说,可以忽略不计。

因此,从内存角度来比较的话,Hyperloglog就是首选。

127.0.0.1:6379> PFADD mykey a b c d e f g
(integer) 1
127.0.0.1:6379> PFCOUNT mykey
(integer) 7

# ===========
# PFMERGE destkey sourcekey [sourcekey ...]
# 从源(sourcekey)key合并数据到目标(destkey)key中
127.0.0.1:6379> PFMERGE mykey2 mykey
OK
127.0.0.1:6379> PFCOUNT mykey2
(integer) 12
127.0.0.1:6379> PFCOUNT mykey
(integer) 7
# 可以看到,destkey可以是已存在的key,也可以是不存在的key,最后把合并的结果保存到destkey中
127.0.0.1:6379> PFMERGE mykey3 mykey2 mykey
OK

总结:

如果允许容错,那么一定可以使用Hyperloglog。

如果不允许容错,就使用set或者自己的数据类型即可。

Redis三种特殊数据类型——Hyperloglog

原文:https://www.cnblogs.com/liuhuan086/p/13582907.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!