这是我参与新手入门的第2篇文章
在Redis 的官方定义中,bitmaps 并不是一个单独的数据类型,它只是 字符串(string) 的二进制表现,可以说是字符串的子集。我们知道 8bit=1 byte,bitmaps 通过比特来表示某个位置的值,因此能够大大减少存储空间。虽然bitmaps 在日常使用中并不多见,但是作为中级开发工程师,仍然要对 bitmaps 的相关特性和常见操作熟练于心。
Bitmaps 基础特性
- 如果通过
type
命令查询key,得到的是字符串(string)类型 - 通过字符串的
get key
命令获取到的数据,是bitmaps 对应的ASCII值 - 默认 8位(8bit=1byte),超过8位会扩容8bit,最多 2^32 个
- 值只能是0或1,传递其他 value 会报错
Bitmaps 常见命令
setbit key offset value
新增数据指令。第一个参数是位号,第二个参数是要设置位的值,即1或0。如果寻址位超出当前字符串长度,则该命令会自动放大对应的字符串长度
getbit key offset
查询对应的索引值。超出范围的位(寻址存储在目标键中的字符串长度之外的位)返回0。
bitcount key [start] [end]
统计对应key中有多少的1
bitop op destkey key [key ...]
bitop命令可以对多个bitmaps做交集(and)、并集(or)、非(not)、异或(xor),并将操作结果存放在destkey中。
常见使用场景
因为 bitmaps 的空间特点,其使用场景更多的是在千万级的数据处理中。尤其以签到、统计DAU,MAU情况为主
1.统计今天(2021.07.08)有多少人登陆
bitcount juejin:20210708
复制代码
2.统计3天有多少用户登陆
bitop or threeday:or juejin:20210706 juejin:20210707 juejin:20210708
bitcount threeday:or
复制代码
3.统计3天有多少用户连续登录
bitop and threeday:and juejin:20210706 juejin:20210707 juejin:20210708
bitcount threeday:and
复制代码
其实BitMap可以运用的场景很多很多(当然也会受到一些限制),思维可以继续扩散~
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END