Redis新数据Bitmaps

1.前言

本篇博客将以演示Bitmaps的常用命令的方式,带各位读者一起学习Redis6新数据类型Bitmaps。如果文章有不合理或者错误的地方,欢迎各位读者朋友在评论区提出,感谢大家的阅读。

2.关于Bitmaps

现代计算机用二进制(位) 作为信息的基础单位, 1个字节等于8位, 例如“abc”字符串是由3个字节组成, 但实际在计算机存储时将其用二进制表示, “abc”分别对应的ASCII码分别是97、 98、 99, 对应的二进制分别是01100001、 01100010和01100011,如下图
在这里插入图片描述
合理地使用操作位能够有效地提高内存使用率和开发效率,Redis提供了Bitmaps这个“数据类型”可以实现对位的操作。
(1)Bitmaps本身不是一种数据类型, 实际上它就是字符串(key-value) , 但是它可以对字符串的位进行操作。
(2)Bitmaps单独提供了一套命令, 所以在Redis中使用Bitmaps和使用字符串的方法不太相同。 可以把Bitmaps想象成一个以位为单位的数组, 数组的每个单元只能存储0和1, 数组的下标在Bitmaps中叫做偏移量。
在一些特定的业务场景中还是非常的适用,上面的介绍或许过于晦涩,可以把它想象成一个特殊的Zset集合

3.常用命令

1. setbit {key} {offset} {value}

使用 setbit <key> <offset> <value> 命令 
向指定的数组 key 中 偏移量 offset 的位置存储 一个值 value (value 只能是 01)
如果指定的数组 key 不存在则创建一个对应的数组 将值存储进去 

2. getbit {key} {offset}

使用 getbit <key> <offset> 命令
返回 对应数组 key 偏移量 offset 存储的数据
注意 这个“单位数组中”如果某个偏移量没有改动过 默认存储的就是 0
如果没有这个key 返回的也是 0
业务场景

为防止上面内容晦涩,小编决定举办一个业务场景,以业务场景演示的方式来带大家熟悉 Bitmaps
假设现在要记录 用户 访问 网站 要记录该用户是否访问过该网站 我们将以用户id作为偏移量 offset
以 0 和 1 记录用户是否访问过 如果访问过 则标记为 1 如果没有访问过 则标记为 0 (值得注意的是在这个“单位数组中”如果某个偏移量没有改动过 默认就是 0 ) 也就是说在这个业务场景中所有用户都没有对这个网站进行访问,数据都是纯净的。

假设 用户 id 为 16 的用户访问了我们特定的站点
则我们执行 setbit user 16 1 
查看用户id为 19 的用户是否访问过该站点
则执行 getbit user 19
注意

在第一次初始化Bitmaps时, 假如偏移量非常大, 那么整个初始化过程执行会比较慢, 可能会造成Redis的阻塞。

3. bitcount {key} [start end]

使用命令 bitcount <key> [start end] 命令
返回对应数组 key 中 start下标 到 end下标  字节组中 值为 1 的数量
如果直接执行 bitcount <key> 则返回其中 值为 1 的数量
在上面的业务场景中查询网站的总访问人数则执行 bitcount userr
注意 下标位置从 0 开始
举例

假设一个字节数组为 01000001 01000000 00000000 00100001 对应的下标位置为 0 1 2 3

假设执行 bitcount K1 1 2 
统计下标12字节组中bit=1的个数 则是 01000000  00000000 其中只有一个 1
则返回 1
假设执行 bitcount K1 1 3
统计下标13字节组中bit=1的个数 即01000000  00000000 00100001 其中有31
则返回 3
假设执行 bitcount K1 0 -2 
统计下标0到下标倒数第2,字节组中bit=1的个数 则 即01000001  01000000   00000000
返回 3
注意

上面使用的 sebit 设置的是bit位置,而bitcount计算的是byte位置

4. bitop and(or/not/xor) {destkey} [key…]

bitop是一个复合操作它可以做多个Bitmaps的and(交集)or(并集)not(非)xor(异或)操作并将结果保存在destkey中

4.结尾

关于Redis中Bitmaps的内容就演示到这里吧,文章有不合理或者错误的地方各位读者朋友可以在评论区提出来,后续专栏将更新更多优质内容,期待的小伙伴可以点个关注。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值