*Redis BITPOS 命令 查找字符串中第一个被设置或清除的位

*语法

BITPOS key bit [start [end [BIT|BYTE]]]

*说明

BITPOS 查找字符串中第一个被设置为指定 bit10)的位置。

默认情况下检索整个字符串。通过指定 startend 可限定范围。返回的位位置始终从字符串起始的第 0 位开始计数,即使使用了 start 参数也是如此。

不存在的 key 被当作空字符串处理。

*边界行为

  • 在空字符串或全 0 字符串中查找 1,返回 -1
  • 在全 1 字符串中查找 0,返回字符串最右侧之后的第一个空位位置(即字符串总 bit 数)。例如 "\xff\xff\xff"(24 个 1)查找 0 返回 24。可以将字符串右侧视为有无限个 0
  • 使用 start/end 限定范围时,若范围内找不到目标值,返回 -1

*返回值

Integer reply:第一个匹配位的位置;找不到时返回 -1

*时间复杂度

O(N),其中 N 为检索的字符串长度。

*版本兼容性

Redis 版本 说明
>= 2.8.7 BITPOS 基础命令可用
>= 7.0.0 支持 BIT 模式,可按 bit 偏移量查找

*示例

# 准备二进制字符串
SET mykey "\xff\xf0\x00"

# 查找第一个 bit 为 0 的位置
BITPOS mykey 0

# 查找第一个 bit 为 1 的位置
SET mykey "\x00\xff\xf0"
BITPOS mykey 1

# 从第 2 个字节开始查找 bit 为 1 的位置
BITPOS mykey 1 2

# 限定字节范围查找
SET mykey "\x00\x00\x00"
BITPOS mykey 1 0 2

# 按 bit 范围查找(Redis 7.0+)
SET mykey "\x0f\xf0"
BITPOS mykey 1 4 11 BIT