Redis之Hyperloglog及Bitmaps

Hyperloglog

什么是基数?
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!
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
上一篇:SQLSERVER 游标的使用


下一篇:[De1CTF 2019]SSRF Me