bitmap就是使用bit位来标识数据,一个bit具有两个值:0和1,正好可以标识true和false,8个bit组成一个byte,当统计大数据量数字集时具有运算快速,节省空间的优势
应用场景:
标识统计用户签到:
一般情况下,用户id都是自增的数字主键,当数百万数千万用户量时,可以结合redis来快速标识统计,redis指令:SETBIT key offset value
key:可以编辑包含当前日期的内容作为key
offset:所谓的偏移量,可以设置为id值,即每个bit位对应着一个用户的状态
value:只能设置0,1,以0和1来标示true和false
redis查询指令:getbit key offset
延伸:redis是使用二进制数据进行存储的,当set testbit a时,发出get testbit,输出"a"
在ascii码表中,a对应的十进制数值是97,二进制数值为01100001
当我们依次按照位数获取,getbit testbit 0-7,依次输出0,1,1,0,0,0,0,1
当我们执行指令,setbit testbit 6 1, setbit testbit 7 0,
输入get testbit,输出为"b",b对应的十进制数值是98,二进制数值为01100010
getbit testbit 0-7,依次输出0,1,1,0,0,0,1,0
由此可知setbit,getbit本质是在操作key对应value的二进制数据,这也是为何节省空间的原因,因为本质上是我们操作的是一个二进制数字
bitmap其他应用场景:快速排序,快速查询,去重,统计