BITCOUNT (位数)

语法
BITCOUNT key [start end [BYTE | BIT]]
从以下位置开始可用:
2.6.0
时间复杂度:
O(N)
ACL 类别:
@read, @bitmap, @slow,

计算字符串中 set bits (population counting) 的数量。

默认情况下,将检查字符串中包含的所有字节。 只能在传递 其他参数 startend

Like 的GETRANGE命令 start 和 end 可以在 order 从字符串末尾开始为字节编制索引,其中 -1 是最后一个 byte,-2 是倒数第二个,依此类推。

不存在的键被视为空字符串,因此该命令将返回零。

默认情况下,附加参数 startend 指定字节索引。 我们可以使用一个额外的参数BIT以指定位索引。 所以 0 是第一位,1 是第二位,依此类推。 对于负值,-1 是最后一位,-2 是倒数第二位,依此类推。

例子

设置 mykey “foobar” BITCOUNT mykey 的 BITCOUNT mykey 0 0 BITCOUNT 我的密钥 1 1 BITCOUNT mykey 1 1 字节 BITCOUNT mykey 5 30 位

模式:使用位图的实时指标

位图是某些类型的 信息。 一个例子是一个 Web 应用程序,它需要用户访问的历史记录,以便 例如,可以确定哪些用户是 beta 的良好目标 特征。

使用SETBIT命令 这很容易完成,每天识别 替换为一个小的 progressive integer。 例如,第 0 天是应用程序上线的第一天,第 1 天 第二天,依此类推。

每次用户执行页面查看时,应用程序都可以在 用户使用SETBIT命令设置 对应于当前日期的位。

稍后,了解用户访问 Web 站点只需调用BITCOUNT命令。

描述了使用 User ID 而不是 days 的类似模式 在名为“使用 Redis 的快速、简单的实时指标”的文章中 位图”。

性能注意事项

在上面计算天数的示例中,即使在 10 年后,该应用程序也是 在线上我们仍然只有365*10每个用户的数据位数,即 456 字节 每个用户。 有了这个数据量BITCOUNT仍然与任何其他 O(1) Redis 一样快 命令,如GETINCR.

当位图很大时,有两种选择:

  • 采用每次修改位图时递增的单独键。 使用小型 Redis Lua 脚本,这可以非常高效且原子化。
  • 使用BITCOUNT startend 可选参数,在客户端累积结果,以及可选的 将结果缓存到一个 key 中。

RESP2/RESP3 回复

Integer reply:设置为 1 的位数。

历史

  • 从 Redis 版本 7.0.0 开始:添加了BYTE|BIT选择。
为本页评分
返回顶部 ↑