1、概述
Redis 在 2.8.9 版本添加了 HyperLogLog 结构。Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。
2、常用命令
PFADD key field1 field2 [feild ...]:添加指定元素到 HyperLogLog 中。
PFADD key field1 field2 [field ...]:返回给定 HyperLogLog 的基数估算值。
PFMERGE destkey sourcekey [sourcekey ...]:将多个 HyperLogLog 合并为一个 HyperLogLog
3、命令使用
127.0.0.1:6379> pfadd m1 1 2 3 4 5 6 7 8
(integer) 1
127.0.0.1:6379> pfcount m1
(integer) 8
127.0.0.1:6379> pfadd m2 2 3 4 5 6
(integer) 1
127.0.0.1:6379> pfcount m2
(integer) 5
127.0.0.1:6379> pfmerge m3 m1 m2
OK
127.0.0.1:6379> pfcount m3
4、使用场景
基数不大,数据量不大就用不上,会有点大材小用浪费空间,有局限性,就是只能统计基数数量,而没办法去知道具体的内容是什么,和bitmap相比,属于两种特定统计情况,简单来说,HyperLogLog 去重比 bitmap 方便很多,一般可以bitmap和hyperloglog配合使用,bitmap标识哪些用户活跃,hyperloglog计数一般使用:统计注册 IP 数,统计每日访问 IP 数、统计页面实时 UV 数、统计在线用户数、统计用户每天搜索不同词条的个数。
5、注意
UV(Unique visitor) 是指通过互联网访问、浏览这个网页的自然人。访问您网站的一台电脑客户端为一个访客。00:00-24:00内相同的客户端只被计算一次。 一天内同个访客多次访问仅计算一个UV。
IP(Internet Protocol) 独立IP是指访问过某站点的IP总数,以用户的IP地址作为统计依据。00:00-24:00内相同IP地址之被计算一次。
UV与IP区别: 如:你和你的家人用各自的账号在同一台电脑上登录新浪微博,则IP数+1,UV数+2。由于使用的是同一台电脑,所以IP不变,但使用的不同账号,所以UV+2
PV(Page View) 即页面浏览量或点击量,用户每1次对网站中的每个网页访问均被记录1个PV。用户对同一页面的多次访问,访问量累计,用以衡量网站用户访问的网页数量。
VV(Visit View) 用以统计所有访客1天内访问网站的次数。当访客完成所有浏览并最终关掉该网站的所有页面时便完成了一次访问,同一访客1天内可能有多次访问行为,访问次数累计。
PV与VV区别: 如:你今天10点钟打开了百度,访问了它的三个页面;11点钟又打开了百度,访问了它的两个页面,则PV数+5,VV数+2. PV是指页面的浏览次数,VV是指你访问网站的次数。