Redis中的bitmap详解

发布时间:2022-04-21 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Redis中的bitmap详解脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

1、什么是bITmap?

bitmap也叫位图,也就是用一个bit位来表示一个东西的状态,我们都知道bit位是二进制,所以只有两种状态,0和1。

2、为什么要有bitmap?

bitmap的出现就是为了大数据量而来的,但是前提是统计的这个大数据量每个的状态只能有两种,因为每一个bit位只能表示两种状态。
下面我们直接以一个统计亿级用户活动的状态来说明吧。

3、案例说明

3.1、案例描述

如果有一个上亿用户的系统,需要我们去统计每一天的用户登录情况,我们应该如何去解决?
前提条件:设置在9月19号有下标为100、101、102、103四个用户都登录了系统
设置在9月20号有下标为100、101、102三个用户都登录了系统
提出问题:
1、取出9月19号登录系统的有多少人?
答:直接获取即可。
2、取出9月19号和9月20号连续登录系统的有多少人?
答:两天的数据取&运算
3、取出9月19号与9月20号任意一天登录的有多少人?
答:两天的数据取|运算。

3.2、解决方案

3.2.1、解决方案1—使用传统数据库解决

如果我们需要使用传统的数据库去统计的话,我么需要创建一张表,然后某个用户登录了,我们就去在表里面插上一条记录,登记用户的id,用户登录的时间等等,但是这样出现的问题就是,每一天的数据量都很大,我们在统计日活时,效率就很低,所以这种解决方案是不能被考虑的。

3.2.2、解决方案2—使用bitmap解决

既然用户登录只有两种状态,那么,我们就可以用bitmap
比如0表示未登录,1表示登录

// 设置在9月19号有下标为100、101、102、103四个用户都登录了系统 start
127.0.0.1:6379> setbit login_09_19 100 1
(integer) 0
127.0.0.1:6379> setbit LOGin_09_19 101 1
(integer) 0
127.0.0.1:6379> setbit login_09_19 102 1
(integer) 0
127.0.0.1:6379> setbit login_09_19 103 1
(integer) 0
// 设置在9月19号有下标为100、101、102、103四个用户都登录了系统 end

// 设置在9月20号有下标为100、101、102三个用户都登录了系统 start
127.0.0.1:6379> setbit login_09_20 100 1
(integer) 0
127.0.0.1:6379> setbit login_09_20 101 1
(integer) 0
127.0.0.1:6379> setbit login_09_20 102 1
(integer) 0
// 设置在9月20号有下标为100、101、102三个用户都登录了系统 end

// 取出9月19号登录系统的有多少人? start
127.0.0.1:6379> bitcount login_09_19
(integer) 4
// 取出9月19号登录系统的有多少人? end

// 取出9月19号和9月20号连续登录系统的有多少人?start
127.0.0.1:6379> bitop and login_in_09_19_20:and login_09_19 login_09_20
(integer) 13
127.0.0.1:6379> bitcount login_in_09_19_20:and
(integer) 3
// 取出9月19号和9月20号连续登录系统的有多少人?end

// 取出9月19号与9月20号任意一天登录的有多少人?start
127.0.0.1:6379> bitop or login_in_09_19_20:or login_09_19 login_09_20
(integer) 13
127.0.0.1:6379> bitcount login_in_09_19_20:or
(integer) 4
// 取出9月19号与9月20号任意一天登录的有多少人?end

在这里插入图片描述

到此这篇关于redis中的bitmap详解的文章就介绍到这了,更多相关Redis中的bitmap内容请搜索脚本宝典以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本宝典!

脚本宝典总结

以上是脚本宝典为你收集整理的Redis中的bitmap详解全部内容,希望文章能够帮你解决Redis中的bitmap详解所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: