Redis BITCOUNT 命令计算指定的字符串中,被设置为 1 的比特位的数量。
一般情况下,指定的整个字符串都会被进行计数,通过指定额外的 start 和 end 参数,可以让计数只在特定的字符串索引位置(索引以 8 位,即 1 byte 作为单位)上进行。start 和 end 参数的设置和 GETRANGE 命令类似,都可以使用负数值,比如 -1 表示最后一个字节,-2 表示倒数第二个字节,以此类推。不存在的 key 被当成是空字符串来处理,因此对一个不存在的 key 进行 BITCOUNT 操作,结果为 0。
命令格式
BITCOUNT key [start end]
可用版本:>=2.6.0
时间复杂度:O(N)
可选参数
BITCOUNT 命令可以选择特定的 byte 范围计数,具体如下:
- start:设置位索引起始位置(包含该位置计数),第一个位置以 0 开始,start 参数需和 end 参数同时设置才合法。
- end:设置位索引结束位置(包含该位置计数),end 参数需和 start 参数同时设置才合法。
注意:BITCOUNT 的 start 和 end 参数的索引意义是以 1 byte 作为单位,如
bitcount mykey 0 0
命令表示 mykey 的字符串的第一个字节中比特位 1 的个数(即字符串第一个字符的比特位为 1 的个数)。
命令返回值
返回被设置为 1 的数量。
示例
redis> SET mykey foobar
OK
redis> BITCOUNT mykey
(integer) 26
redis> BITCOUNT mykey 0 0
(integer) 4
redis> BITCOUNT mykey 1 1
(integer) 6
使用场景
BITCOUNT 和 SETBIT 一起可以实现用户上线次数的统计。