开发者学堂课程【Redis 入门到精通(进阶篇):Bitmaps 类型的扩展操作】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/765/detail/13444
Bitmaps 类型的扩展操作
目录
一,Bitmaps 扩展操作详细解析
二,Bitmaps 对应的操作
本章主要讲解 Bitmaps 的应用场景以及具体对应的操作:
一,Bitmaps 扩展操作详细解析
1.业务场景
电影网站
统计每天某一部电影是否被点播
统计每天有多少部电影被点播
统计每周/月/年有多少部电影被点播
统计年度哪部电影没有被点播
2.业务分析
分析情况1:假定有01010011一组数据。每天播一部电影,用对应的编号存储。这时如果想看某一部电影是否被点播,首先给一个电影名称,之后获取他对应的id.然后把它作为 offset 偏移量直接拿去就可以。比如以下图拿出来的值就是对应的零,也就是这部电影没有被看过。
分析情况2:如果要去统计有多少部电影被点播,其实看这组数据就能观察出来是一个什么样的特征,只要把里边一的数量给统计一下就可以。这也就是有多少部电影被点播过。
分析情况3:如果需要统计每一年,每一个月,每一周有多少部电影被点播过。应该怎么去做?举例这是一天的数,那么可以对每天统计,每天统计以后保存一个数据。用它对应的日期做标记。之后,可以再来一个这样的指示,第二天之后再来一个第三天,连着再来一个第四天,把这些值放到一起,可以求一个操作。这里涉及二进制,如果在对应的位置上两个位都是零,它会得到零,只要有一个适宜,它就可以得到一,按照这样的形式,可以看他获完是什么,结果为11011001,这就是对应的这一周哪些电影被点播过的一个结果。也就是说,没有必要再去维护一个变量,让它全年运行着,只需要每天运行就可以。这样到了年底的时候,就算哪一天的数据出现问题也是没有问题的。也可以说300多个数据,少一个也无需大碍。这就是我们要想统计长期的这样数据的时候,用前面的每天的数据做一下操作就可以。最后对这里的一统计一下数量就可以。
分析情况4:如果想统计年度哪部电影没有被点播?刚才的情况中已经统计了全年的电影是否播放的一个最终数据,下面要做的事清,就是看哪些位是零,这些对应的位置对应的电影编号是被播放过,如果一年这个电影都没人看的话,就可以考虑把这个电影从你的整个网站上下价格,虽然它会影响电影的存储量。比如说我这个电影网站保有五千万部。它会影响这个,但是存储空间是可以腾出来的,另外也不一定非要真正的存储,可以考虑把它下架掉,之后标明也是可以取的。
此图为依次说明分析情况的图,可以依次参考:
二,Bitmaps 对应的操作
1.对指定 key 按位进行交、并、非、异或操作,并将结果保存到 destKey 中
bitop op destkey keyl [key2...l
and:交 or:并 not:非 xor:异或
以下为老师操作的过程运用到的代码:
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> setbit 20880808 0 1 Cinteger)0
127.0.0.1:6379> setbit 20880808 4 1(integer)0
127.0.0.1:6379> setbit 20880808 8 1(integer)0
127.0.0.1:6379> setbit 20880809 0 1(integer)0
127.0.0.1:6379> setbit 20880809. 5 1 Cinteger)0
127.0.0.1:6379> setbit 20880809 8 1 f27.6 01:6379> bitcount 20880808
Cinteger)3
127.0.0.1:6379> bitcount 20880809(integer)3.
127.0.0.1:6379> setbit 20880808 6 1(integer)0'
127.0.0.1:6379> bitcount 20880808(integer)4
127.0.0.1:6379> bitop or 08-09 20880808 20880809(integer)2
127.0.0.1:6379> bitcount 08-09(integer)5
127.0.0.1:6379>
2.统计指定 key 中1的数量
bitcount key [start end]
首先,统计它的数量的 bitcount,之后对应的 key 告诉它,然后把范围告诉它从哪开始到哪结束,不给就是全统计。