BITOP

用法
BITOP 〈 AND | OR | XOR | NOT 〉 destkey key [ key ... ]
复杂度
O(N)
起始版本
2.6.0
ACL 类别
@bitmap, @write, @slow

在多个键(包含字符串值)之间执行位运算,并将结果存储到目标键中。

`BITOP` 命令支持四种位运算:**AND**、**OR**、**XOR** 和 **NOT**,因此调用该命令的有效形式是

  • BITOP AND destkey srckey1 srckey2 srckey3 ... srckeyN
  • BITOP OR destkey srckey1 srckey2 srckey3 ... srckeyN
  • BITOP XOR destkey srckey1 srckey2 srckey3 ... srckeyN
  • BITOP NOT destkey srckey

如您所见,**NOT** 比较特殊,因为它只接受一个输入键,因为它执行的是位的反转操作,所以它只作为一元运算符才有意义。

操作结果始终存储在 `destkey` 中。

处理不同长度的字符串

当对不同长度的字符串执行操作时,所有比集合中最长字符串短的字符串都将被视为在其末尾填充零,直至达到最长字符串的长度。

对于不存在的键也是如此,它们被视为零字节流,直至达到最长字符串的长度。

示例

127.0.0.1:6379> SET key1 "foobar"
OK
127.0.0.1:6379> SET key2 "abcdef"
OK
127.0.0.1:6379> BITOP AND dest key1 key2
(integer) 6
127.0.0.1:6379> GET dest
"`bc`ab"

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

`BITOP` 是对 `BITCOUNT` 命令文档中描述的模式的良好补充。可以组合不同的位图以获得执行位计数操作的目标位图。

请参阅题为《使用 Valkey 位图实现快速简单的实时指标》的文章,了解有趣的用例。

性能考量

`BITOP` 是一个潜在的慢命令,因为它以 O(N) 时间运行。对长输入字符串执行此命令时应格外小心。

对于涉及大量输入的实时指标和统计,一个好的方法是使用副本(启用 replica-read-only 选项),在副本上执行位运算以避免阻塞主实例。

RESP2/RESP3 回复

整数回复:存储在目标键中的字符串大小等于最长输入字符串的大小。