什么是基数?
A{1,3,5,7,4,9}
B{1,3,5,7}
基数(不重复的元素),可以接受误差!
简介
Hyperloglog 技术统计的算法
优点:占用的内存是固定,2^64不同的元素技术,只需要12KB内存
网页的UV(一个人访问一个网站多次,但是还算一个人!)
传统的方式,set保存用户的id,然后就可以统计set中的元素数量作为标准判断!
这个方式如果保存大量的用户id,就会比较麻烦!我们的目得是为了计数,而不是保存用户id;
127.0.0.1:6379> PFADD mykey a b c e f g h j k l #创建第一组元素 (integer) 1 127.0.0.1:6379> PFCOUNT mykey #统计mykey元素的技术数量 (integer) 10 127.0.0.1:6379> PFADD mykey2 dfasguygfffyuerhfugbduygfuyrwguyfg (integer) 1 127.0.0.1:6379> PFADD mykey2 f ef e ge g e ge g eg eg e g e ge g #创建第二组元素mykey2 (integer) 1 127.0.0.1:6379> PFCOUNT mykey2 (integer) 7 127.0.0.1:6379> pfmerge mykey3 mykey mykey2 #合并两组 mykey mykey2=>mykey3 并集 OK 127.0.0.1:6379> PFCOUNT mykey3 #看并集的数量 (integer) 14 127.0.0.1:6379>
总结:如果允许容错,那么一定可以使用Hyperloglog!
如果不允许容错,就使用set或者自己的数据类型即可
位存储
统计用户信息,活跃,不活跃!登录,未登录!打卡 。两个状态的可以使用Bitmaps!
Bitmaps位图,数据结构! 都是操作二进制来进行记录就只有0和1两个状态!
365天 = 365bit 1字节=8bit 46个字节左右
使用bitmap来记录,周一到周日的打开
127.0.0.1:6379> setbit sign 1 0 (integer) 0 127.0.0.1:6379> setbit sign 2 0 (integer) 0 127.0.0.1:6379> setbit sign 3 1 (integer) 0 127.0.0.1:6379> setbit sign 4 1 (integer) 0 127.0.0.1:6379> setbit sign 5 0 (integer) 0 127.0.0.1:6379> setbit sign 6 0 (integer) 0
周一 :0 周二:0 周三:1
查看某一天是否打卡
127.0.0.1:6379> getbit sign 3 (integer) 1 127.0.0.1:6379> getbit sign 2 (integer) 0 127.0.0.1:6379>
统计操作,统计打卡的天数
127.0.0.1:6379> BITCOUNT sign #统计这周打卡记录,是否全勤 (integer) 3