- 用法
-
BITPOS key bit [ start [ end [ BYTE | BIT ] ] ]
- 复杂度
- O(N)
- 自
- 2.8.7
- ACL 类别
- @bitmap, @read, @slow
返回字符串中第一个设置为 1 或 0 的位的偏移量。
返回的偏移量是按照将字符串视为从左到右的位数组来计算的,其中第一个字节的最高有效位在位置 0,第二个字节的最高有效位在位置 8,依此类推。
GETBIT
和 SETBIT
也遵循相同的位偏移量约定。
默认情况下,会检查字符串中包含的所有字节。可以通过传递附加参数 start 和 end 来仅在指定区间内查找位(也可以只传递 start,操作会假定结束是字符串的最后一个字节。但如后文所述,存在语义差异)。默认情况下,该范围被解释为字节范围而不是位范围,因此 start=0
和 end=2
意味着查看前三个字节。
您可以使用可选的 BIT
修饰符来指定范围应解释为位范围。因此 start=0
和 end=2
意味着查看前三位。
请注意,即使使用 start 和 end 指定范围,位偏移量也始终作为从零开始的绝对值返回。
与 GETRANGE
命令类似,start 和 end 可以包含负值,以便从字符串的末尾开始索引字节,其中 -1 是最后一个字节,-2 是倒数第二个字节,依此类推。当指定 BIT
时,-1 是最后一个位,-2 是倒数第二个位,依此类推。
不存在的键被视为空字符串。
示例
127.0.0.1:6379> SET mykey "\xff\xf0\x00"
OK
127.0.0.1:6379> BITPOS mykey 0
(integer) 12
127.0.0.1:6379> SET mykey "\x00\xff\xf0"
OK
127.0.0.1:6379> BITPOS mykey 1 0
(integer) 8
127.0.0.1:6379> BITPOS mykey 1 2
(integer) 16
127.0.0.1:6379> BITPOS mykey 1 2 -1 BYTE
(integer) 16
127.0.0.1:6379> BITPOS mykey 1 7 15 BIT
(integer) 8
127.0.0.1:6379> set mykey "\x00\x00\x00"
OK
127.0.0.1:6379> BITPOS mykey 1
(integer) -1
127.0.0.1:6379> BITPOS mykey 1 7 -3 BIT
(integer) -1
RESP2/RESP3 回复
以下之一
如果查找已设置位(bit 参数为 1),并且字符串为空或仅由零字节组成,则返回 -1。
如果我们查找清除位(bit 参数为 0),并且字符串仅包含设置为 1 的位,则该函数返回字符串右侧第一个不属于字符串的位。因此,如果字符串是三个设置为 0xff
的字节,则命令 BITPOS key 0
将返回 24,因为直到第 23 位,所有位都是 1。
如果您查找清除位并且没有指定范围或仅指定了 start 参数,则该函数将字符串右侧视为用零填充。
但是,如果您查找清除位并且使用 start 和 end 同时指定了范围,则此行为会改变。
如果在指定范围内未找到清除位,则函数返回 -1,因为用户指定了清除范围,并且该范围内没有 0 位。
历史
版本 | 更改 |
---|---|
7.0.0 | 添加了 |