- 用法
-
BITOP 〈 AND | OR | XOR | NOT 〉 destkey key [ key ... ]
- 复杂度
- O(N)
- 起始版本
- 2.6.0
- ACL 类别
- @bitmap, @write, @slow
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
在多个键(包含字符串值)之间执行位运算,并将结果存储到目标键中。
`BITOP` 命令支持四种位运算:**AND**、**OR**、**XOR** 和 **NOT**,因此调用该命令的有效形式是
如您所见,**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 回复
整数回复:存储在目标键中的字符串大小等于最长输入字符串的大小。