Redis数据结构:位图
位图(bitmap)是由多个二进制位组成的数组,数组中每个二进制位都有与之对应的偏移量(或称索引),用户可通过偏移量对位图中指定的一个或多个二进制位进行操作。
数据结构
- 位图
位图
-
设置位图中二进制位的值
1.setbit命令 格式:setbit key offset value
为位图中指定偏移量的二进制位设置值,设置后返回被设置之前的旧值(若未设置过默认初始化为0),偏移量只能为正。
setbit key offset value
-
获取二进制位的值
1.getbit命令 格式:getbit key offset
获取位图指定偏移量上二进制位的值,偏移量也只能为正数,若位图不存在偏移量超过位图最大偏移量返回0。
getbit key offset
-
统计被设置过的二进制位数量
1.bitcount命令 格式:bitcount key [start end]
统计位图中有多少个二进制位被设置为1。start、end指字节索引值而非位索引值,一个字节有8位,start、end为闭区间。start、end可以取负数,代表倒数字节。
bitcount key [start end]
-
查找位图中第一个被设置的二进制位
1.bitpos命令 格式:bitpos key bit [start] [end]
在位图中查找第一个被设置为指定值的二进制位并返回其偏移量。start、end指字节索引值而非位索引值,一个字节有8位,start、end为闭区间。start、end可以取负数,代表倒数字节,若范围内未查找到1返回-1。位图不存在时也返回-1
bitpos key bit [start] [end]
-
二进制位运算
1.bitop命令 格式:bitop operation destkey key [key …]
对一个或多个位图进行二进制位运算,运算结果存储到指定键中,operation可为AND、OR、XOR、NOT,分别为与、或、异或、非,NOT只允许一个位图参与运算,命令执行后返回被存储位图的字节长度。
bitop operation destkey key [key ...]
-
位图中存储整数值
在位图的指定区域存储指定长度的整数值,并对这些整数值执行加法或减法运算。
bitfield key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]
1.bitfield的set命令 格式:bitfield key SET type offset value
在位图的指定偏移量设置一个type类型的整数值,offset为起始偏移量也可前加#表示索引,type用于指定被设置值类型,以i或u为前缀后跟位长度,i表示设置为有符号整数,u表示设置为无符号整数,最大为i64和u63,若value超过type指定则截断。命令返回旧值作为执行结果。
bitfield key SET type offset value
2.bitfield的get命令 格式:bitfield key GET type offset
获取区域存储的值。
bitfield key GET type offset
3.bitfield的incrby命令 格式:bitfield key INCRBY type offset increment
执行加法或减法运算,执行完成后返回整数当前值。
bitfield key INCRBY type offset increment
4.bitfield的overflow命令 格式:bitfield key OVERFLOW WRAP|SAT|FAIL
控制incrby命令发生溢出时的行为,WRAP表示采用回绕方式(incrby默认采用),即向上溢出的整数值从类型的最小值重新计算而向下溢出的整数值从类型的最大值重新计算,SAT表示采用饱和运算,即向上溢出的整数值设置为类型最大值而向下溢出的整数值设置为类型最小值,FAIL表示拒绝,即直接失败返回空值。
bitfield key INCRBY type offset increment OVERFLOW WRAP|SAT|FAIL
-
使用字符串命令操作位图
位图键可看做字符串键,可以使用字符串命令操作位图。
-
常见用法
1.用户行为记录(某一事件执行/未执行)