BITCOUNT (位数)
语法
BITCOUNT key [start end [BYTE | BIT]]
- 从以下位置开始可用:
- 2.6.0
- 时间复杂度:
- O(N)
- ACL 类别:
-
@read
,@bitmap
,@slow
,
计算字符串中 set bits (population counting) 的数量。
默认情况下,将检查字符串中包含的所有字节。 只能在传递 其他参数 start 和 end。
Like 的GETRANGE
命令 start 和 end 可以在
order 从字符串末尾开始为字节编制索引,其中 -1 是最后一个
byte,-2 是倒数第二个,依此类推。
不存在的键被视为空字符串,因此该命令将返回零。
默认情况下,附加参数 start 和 end 指定字节索引。
我们可以使用一个额外的参数BIT
以指定位索引。
所以 0 是第一位,1 是第二位,依此类推。
对于负值,-1 是最后一位,-2 是倒数第二位,依此类推。
例子
模式:使用位图的实时指标
位图是某些类型的 信息。 一个例子是一个 Web 应用程序,它需要用户访问的历史记录,以便 例如,可以确定哪些用户是 beta 的良好目标 特征。
使用SETBIT
命令 这很容易完成,每天识别
替换为一个小的 progressive integer。
例如,第 0 天是应用程序上线的第一天,第 1 天
第二天,依此类推。
每次用户执行页面查看时,应用程序都可以在
用户使用SETBIT
命令设置
对应于当前日期的位。
稍后,了解用户访问
Web 站点只需调用BITCOUNT
命令。
描述了使用 User ID 而不是 days 的类似模式 在名为“使用 Redis 的快速、简单的实时指标”的文章中 位图”。
性能注意事项
在上面计算天数的示例中,即使在 10 年后,该应用程序也是
在线上我们仍然只有365*10
每个用户的数据位数,即 456 字节
每个用户。
有了这个数据量BITCOUNT
仍然与任何其他 O(1) Redis 一样快
命令,如GET
或INCR
.
当位图很大时,有两种选择:
- 采用每次修改位图时递增的单独键。 使用小型 Redis Lua 脚本,这可以非常高效且原子化。
- 使用
BITCOUNT
start 和 end 可选参数,在客户端累积结果,以及可选的 将结果缓存到一个 key 中。
RESP2/RESP3 回复
Integer reply:设置为 1 的位数。历史
- 从 Redis 版本 7.0.0 开始:添加了
BYTE|BIT
选择。