这是我参与2022首次更文挑战的第17天,活动详情查看:2022首次更文挑战
hello,你好呀,我是灰小猿,一个超会写bug的程序员,
上一篇文章我们讲解了在Redis的特殊数据类型中Gaospatial地理位置,并且讲解了这种数据类型在平常地图中的实际用途,今天我们继续来和大家分享一下在Redis中的另一种特殊数据类型Hyperloglog基数统计。
Hyperloglog基数统计
Redis中的Hyperloglog主要是用来进行基数统计,很多小伙伴对于基数这个概念可能还不是很理解,什么是基数呢?
基数计算(cardinality counting)指的是统计一批数据中的抛去重复元素后数据的个数
举个例子来说一下:
比如我们现在定义两个数字集合h1和h2
h1={1,3,5,7,9,7}
h2={3,4,6,8,9,5}
那么h1中抛去重复后得到的数据集合是{1,3,5,7,9},所以h1的基数就是5,h2中跑去重复的元素后得到的集合是{3,4,6,8,9,5},所以h2是的基数就是6,
那么基数统计一般用于什么情况下呢?比如我们一个人访问一次网站,就用一个数来记录,但是一个人可能会多次访问这个网站,那么如果想要知道多少人访问了网站,就需要去掉重复的数据。
使用基数统计的优势就是内存是固定的,使用内存非常小,可以减轻内存的使用,提升查询的效率!
创建一组数据
在进行基数统计之前肯定是要有数据源的,在Hyperloglog中可以通过PFADD命令创建数据
格式如下:
PFADD key element [element ...]
- key为数据集的索引
- element为数据集中的数据,可以输入多个,中间以空格分隔
例如我们输入索引为“mynum1”,数据为{a,b,c,d,e,f,g}的数据集,索引为“mynum2”,数据为{f,g,h,i,j,k,l,m}的数据集,索引为“mynum3”,数据为{n,o,p,q,n}的数据集.
127.0.0.1:6379> PFADD mynum1 a b c d e f g
(integer) 1
127.0.0.1:6379> PFADD mynum2 f g h i j k l m
(integer) 1
127.0.0.1:6379> PFADD mynum3 n o p q n
(integer) 1
统计数据集的基数数量
该命令就可以统计一个数据集的基数是多少,命令格式如下:
PFCOUNT key [key ...]
- key为要查询的数据集的索引,可以输入多个,以空格分开
比如我们查询“mynum1”,“mynum1”中的七个元素都不重复,那么基数是7。查询“mynum3”,“mynum3”中的n重复,那么基数是4
127.0.0.1:6379> PFCOUNT mynum3
(integer) 4
127.0.0.1:6379> PFCOUNT mynum1
(integer) 7
合并数据集
合并数据集是可以将一个或多个数据集求并集,命令格式如下:
PFMERGE destkey sourcekey [sourcekey ...]
- destkey为要合并到的数据集的名称
- sourcekey为要合并的数据集的索引,可以存在多个,中间以空格分隔
比如我们将“mynum1”和“mynum2”合并并集为“mynum4”,再求“mynum4”的基数,得到13,是因为其中的f和g重复。
这种方法的主要作用是用来统计在线人数,去除重复元素,计算元素总数的一种方法,在数据量非常大的时候可能会存在误差,但是不会影响使用,
下一篇我们来讲解在Redis中的第三种特殊数据类型Bitmap位图场景、
我是灰小猿,我们下期见!