比特波斯

语法
BITPOS key bit [start [end [BYTE | BIT]]]
从以下位置开始可用:
2.8.7
时间复杂度:
O(N)
ACL 类别:
@read, @bitmap, @slow,

返回字符串中设置为 1 或 0 的第一个位的位置。

返回位置,将字符串视为从 left 到 右,其中第一个字节的最高有效位位于位置 0,第二个字节 byte 的最高有效位位于位置 8,依此类推。

相同的位位置约定后跟GETBITSETBIT.

默认情况下,将检查字符串中包含的所有字节。 可以仅在指定间隔内查找位,并传递附加参数 startend (可以只传递 start,该作将假定 end 是字符串的最后一个字节。但是,存在语义差异,稍后将对此进行解释)。 默认情况下,范围被解释为字节范围,而不是位范围,因此start=0end=2表示查看前 3 个字节。

您可以使用可选的BIT修饰符指定范围应解释为位范围。 所以start=0end=2表示查看前 3 位。

请注意,即使使用 startend 指定范围,位位置也始终以从零位开始的绝对值返回。

Like 的GETRANGE命令 start 和 end 可以在 order 从字符串末尾开始为字节编制索引,其中 -1 是最后一个 byte,-2 是倒数第二个,依此类推。什么时候BIT,则 -1 是最后一个 bit,-2 是倒数第二个,依此类推。

不存在的键被视为空字符串。

例子

redis> SET mykey "\xff\xf0\x00"
OK
redis> BITPOS mykey 0
(integer) 12
redis> SET mykey "\x00\xff\xf0"
OK
redis> BITPOS mykey 1 0
(integer) 8
redis> BITPOS mykey 1 2
(integer) 16
redis> BITPOS mykey 1 2 -1 BYTE
(integer) 16
redis> BITPOS mykey 1 7 15 BIT
(integer) 8
redis> set mykey "\x00\x00\x00"
OK
redis> BITPOS mykey 1
(integer) -1
redis> BITPOS mykey 1 7 -3 BIT
(integer) -1

RESP2/RESP3 回复

以下选项之一:

  • Integer reply:根据请求将第一位的位置设置为 1 或 0
  • 整数回复-1.如果bit参数为 1,字符串为空或仅由 0 个字节组成

如果我们查找设置位(bit 参数为 1)并且字符串为空或仅由零字节组成,则返回 -1。

如果我们查找清除位(bit 参数为 0)并且字符串仅包含设置为 1 的位,则该函数将返回第一个位,而不是右侧字符串的一部分。因此,如果字符串是 3 个字节,则设置为0xff命令BITPOS key 0将返回 24,因为直到第 23 位的所有位都是 1。

如果您查找清除位并且未指定 range 或指定 start 参数,则该函数会将字符串的右侧视为用零填充。

但是,如果要查找 clear bits 并指定具有 startend 的范围,则此行为会发生变化。 如果在指定范围内未找到明文位,则函数将返回 -1,因为用户指定了明文范围,并且该范围内没有 0 位。


历史

  • 从 Redis 版本 7.0.0 开始:添加了BYTE|BIT选择。
为本页评分
返回顶部 ↑