*Redis BITPOS 命令 查找字符串中第一个被设置或清除的位
*语法
BITPOS key bit [start [end [BIT|BYTE]]]
*说明
BITPOS 查找字符串中第一个被设置为指定 bit(1 或 0)的位置。
默认情况下检索整个字符串。通过指定 start 和 end 可限定范围。返回的位位置始终从字符串起始的第 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