Redis 三种特殊数据类型之 Hyperloglog

什么是基数

A{1,3,5,7,8,9,7}
B{1,3,5,7,8}
基数(不重复的元素)=5,可以接受误差!

简介

Redis 2.8.9版本就更新了 Hyperloglog 数据结构!
Redis Hyperloglog 基数统计的算法!
优点:占用的内存是固定的,2<sup>64</sup>不同的元素的基数,只需要废12KB内存!如果要从内存角度来比较的话 Hyperloglog首选!
网页的PV(一个人访问一个网站多次,但是还是算作一个人)
传统的方式,set保存用户的id,然后就可以统计set 中的元素数量作为判断标准
这个方式如果保存了大量的用户id,就会比较麻烦!我们的目的是为了计数,而不是为了保存用户id;
0.81%的错误率!统计PV任务,可以忽略不记

测试

127.0.0.1:6379[1]> PFADD mykey a b c d e f g h i j    # 创建第一组元素 mykey
(integer) 1
127.0.0.1:6379[1]> PFCOUNT mykey    # 统计 mykey 的基数数量
(integer) 10
127.0.0.1:6379[1]> PFADD mykey2 i j z x c v b n m
(integer) 1
127.0.0.1:6379[1]> PFCOUNT mykey2
(integer) 9
127.0.0.1:6379[1]> PFMERGE mykey3 mykey mykey2    # 合并两组mykey mykey2 => mykey3 并集
OK
127.0.0.1:6379[1]> PFCOUNT mykey3
(integer) 15

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

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!