©
This document uses PHP Chinese website manual Release
BITPOS key bit [start] [end]
自2.8.7起可用。
时间复杂度: O(N)
将字符串中第一位的位置设置为1或0。
返回该位置,将字符串视为从左到右的位数组,其中第一个字节的最高有效位位于位置0,第二个字节的最高有效位位于位置8,等等。
GETBIT 和 SETBIT后面跟着相同的位位置约定。
默认情况下,检查字符串中包含的所有字节。可以仅在指定的时间间隔内查找位,并传递额外的参数 start 和 end(可能只是传递start,操作会假定 end 是字符串的最后一个字节,但是存在语义差异后来)。的范围内被解释为范围的字节,而不是一比特的,所以start=0
和end=2
装置看的前三个字节。
请注意,即使在使用开始和结束来指定范围时,位位置也始终以从零位开始的绝对值的形式返回。
与 GETRANGE 命令类似,开始和结束可以包含负值,以便从字符串的末尾开始索引字节,其中-1是最后一个字节,-2是倒数第二个字符,等等。
不存在的键被视为空字符串。
整数回复
该命令根据请求返回第一位设置为1或0的位置。
如果我们查找设置位(位参数为1)并且字符串为空或仅由零字节组成,则返回-1。
如果我们查找清零位(位参数为0)并且该字符串仅包含位设为1,则函数返回第一位,而不是右侧字符串的一部分。因此,如果字符串是三个字节设置为该值,0xff
该命令BITPOS key 0
将返回24,因为直到位23,所有的位都是1。
基本上,函数认为字符串的权利,与你寻找明确位,没有指定范围或补零开始的说法只。
但是,如果您正在查找清除位并指定具有开始和结束的范围,则此行为会发生变化。如果在指定范围内未找到清除位,则该函数返回-1,因为用户指定了一个清除范围,并且该范围内没有0位。
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> set mykey "\x00\x00\x00" "OK"
redis> BITPOS mykey 1 (integer) -1