Redis中的bitmap位图使用场景分析
1. 随机窗口的登录场景分析
如果正常通过关系型数据库表进行存储信息,需要存储的信息最少有用户的id、用户名、用户的登录时间等等信息,一个用户365天登录了就会存365条信息,用户一多就会出现很大的存储需求。
而使用Redis的bitmap位图进行存储操作就会非常节省空间,计算起来也非常便捷,比如下图的简单案例,tom在第1天、第13天、第365天进行了登录操作,通过setbit位操作将登录的天数设置为位的索引位置,登录则设置值为1,此时查询tom登录了多少天就可以通过bitcount快速查询到结果为3,因为是二进制的操作所以查询速度会非常快速,最后我们看看总的消耗存储空间365天的登录信息只消耗了46个字节的存储
而进行随机窗口的取值,比如查看最后tom一个月的登录次数,如图所示,因为一个字节是8位,最后一个月30天,就是查看最后4个字节中值为1的情况,通过反向索引就是bitcount tom -4 -1最后四个字节的统计。
2.按照随机窗口进行活跃用户数统计分析
如果使用传统的关系型数据库表进行统计,首先需要存储最少有用户的id、用户名、用户的登录时间等等信息,然后再查出表的结果后需要进行去重操作,一个是会需要很大的存储,二一个是需要比较复杂的运算,结果会需要一定的时间。
如果通过Redis进行设计,只需要将日期存为key,再将用户都映射到位索引的地方(比如tom 是1号索引位,jack为12号索引位),如果登录了则设置值为1,如图所示,tom在20220101、20220102、20220103进行了登录,jack在20220102进行了登录,此时进行bitop的或运算,计算20220101和20220102之间登录的用户为活跃用户,因为或运算是有1则为1,而相同位置出现1会自动去重为1,而相同位置代表同一个人,此时就完成了用户的去重操作,而且因为是二进制进行运算,速度会非常快,按照随机窗口进行活跃用户数的统计会变得非常高效。
- 点赞
- 收藏
- 关注作者
评论(0)