BITPOS

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

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

位号是从左到右,将字符串视为一个字节数组,其中第一个字节的最高有效位为 0,第二个字节的最高有效位为 8,以此类推。

GETBITSETBIT 命令遵循相同的位号约定。

默认情况下,会检查字符串中包含的所有字节。可以通过传递额外的参数 *start* 和 *end* 来指定只查找指定区间内的位(也可以只传递 *start*,操作会假设 *end* 为字符串的最后一个字节,但存在语义差异,如后文所述)。默认情况下,区间被解释为字节区间,而不是位区间,因此 start=0end=2 表示查看前三个字节。

可以使用可选的 BIT 修饰符指定区间应被解释为位区间。因此 start=0end=2 表示查看前三位。

请注意,即使使用 *start* 和 *end* 指定区间,位号始终返回从 0 开始的绝对值。

GETRANGE 命令一样,*start* 和 *end* 可以包含负值,以便从字符串的末尾开始索引字节,其中 -1 为最后一个字节,-2 为倒数第二个字节,以此类推。当指定 BIT 时,-1 为最后一个位,-2 为倒数第二个位,以此类推。

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

示例

SET mykey "\xff\xf0\x00" BITPOS mykey 0 SET mykey "\x00\xff\xf0" BITPOS mykey 1 0 BITPOS mykey 1 2 BITPOS mykey 1 2 -1 BYTE BITPOS mykey 1 7 15 BIT set mykey "\x00\x00\x00" BITPOS mykey 1 BITPOS mykey 1 7 -3 BIT

RESP2/RESP3 回复

以下之一

  • 整型回复: 根据请求,第一个设置为 1 或 0 的位的位号
  • 整型回复: -1. 如果 bit 参数为 1 且字符串为空或仅包含零字节

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

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

如果查找清除的位且未指定区间或仅指定 *start* 参数,则函数将字符串右侧视为填充有零。

但是,如果查找清除的位并使用 *start* 和 *end* 指定了区间,则此行为会发生变化。如果在指定区间中找不到清除的位,则函数将返回 -1,因为用户指定了清除区间,而该区间中没有 0 位。


历史记录

  • 从 Redis 7.0.0 版本开始:添加了 BYTE|BIT 选项。
RATE THIS PAGE
Back to top ↑