目录
2.3 BITCOUNT key [start] [end]
2.4 BITPOS key bit [start] [end]
2.5 BITOP operation destkey key [key …]
1、简介
Bitmaps 称为位图,它不是一种数据类型。网上很多视频教程把Bitmaps称为数据类型,应该是不正确的。Bitmaps 是Redis提供给使用者用于操作位的“数据类型”。它主要有如下的基本特性:
-
Bitmaps 不是数据类型,底层就是字符串(key-value),byte数组。我们可以使用普通的get/set直接获取和设值位图的内容,也可以通过Redis提供的位图操作getbit/setbit等将byte数组看成“位数组”来处理
-
Bitmaps 的“位数组”每个单元格只能存储0和1,数组的下标在Bitmaps中称为偏移量
-
Bitmaps设置时key不存在会自动生成一个新的字符串,如果设置的偏移量超出了现有内容的范围,就会自动将位数组进行零扩充
2 、基本操作
2.1 SETBIT key offset value
对key存储的字符串,设置或者清除指定偏移量上的位(bit),位的设置或者清除取决于value参数,0/1;当key不存在时,自动生成一个新的字符串。字符串会进行伸展确保value保存在指定的偏移量上。字符串进行伸展时,空白位置以0填充。
时间复杂度 :
O(1)
offset 范围:
0~2^32
返回值:
指定偏移量原来存储的位
案例:
使用Bitmaps来存储用户是否打卡,打卡记做1,未打卡为0,用户的id作为偏移量 假设存在10个用户,此时用户1、3、5、9、10打了卡,其他人未打卡,Bitmaps的初始化结果如下所示: clock:20210806代表2021/08/06的打卡记录
注意事项:
正式系统中,id肯定不会是0、1、2这种,而是以某一个数组开头,比如1000000000000001、1000000000000002这个时候非常容易导致偏移量的浪费,因此我们可以考虑通过计算减去一个合适的值后再设置偏移量,如果设置的Bitmaps偏移量过大,容易造成分配内存时间过长,Redis服务器被阻塞。
2.2 GETBIT key offset
获取指定偏移量上的位(bit),当offset比字符串长度大,或者key不存在,返回0;