BITOP operation destkey key [key …]

可用版本: >= 2.6.0
时间复杂度: O(N)

对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上。

operation 可以是 ANDORNOTXOR 这四种操作中的任意一种:

  • BITOP AND destkey key [key …] ,对一个或多个 key 求逻辑并,并将结果保存到 destkey

  • BITOP OR destkey key [key …] ,对一个或多个 key 求逻辑或,并将结果保存到 destkey

  • BITOP XOR destkey key [key …] ,对一个或多个 key 求逻辑异或,并将结果保存到 destkey

  • BITOP NOT destkey key ,对给定 key 求逻辑非,并将结果保存到 destkey

除了 NOT 操作之外,其他操作都可以接受一个或多个 key 作为输入。

处理不同长度的字符串

BITOP 处理不同长度的字符串时,较短的那个字符串所缺少的部分会被看作 0

空的 key 也被看作是包含 0 的字符串序列。

返回值

保存到 destkey 的字符串的长度,和输入 key 中最长的字符串长度相等。

Note

BITOP 的复杂度为 O(N) ,当处理大型矩阵(matrix)或者进行大数据量的统计时,最好将任务指派到附属节点(slave)进行,避免阻塞主节点。

代码示例

  1. redis> SETBIT bits-1 0 1 # bits-1 = 1001
  2. (integer) 0
  3.  
  4. redis> SETBIT bits-1 3 1
  5. (integer) 0
  6.  
  7. redis> SETBIT bits-2 0 1 # bits-2 = 1011
  8. (integer) 0
  9.  
  10. redis> SETBIT bits-2 1 1
  11. (integer) 0
  12.  
  13. redis> SETBIT bits-2 3 1
  14. (integer) 0
  15.  
  16. redis> BITOP AND and-result bits-1 bits-2
  17. (integer) 1
  18.  
  19. redis> GETBIT and-result 0 # and-result = 1001
  20. (integer) 1
  21.  
  22. redis> GETBIT and-result 1
  23. (integer) 0
  24.  
  25. redis> GETBIT and-result 2
  26. (integer) 0
  27.  
  28. redis> GETBIT and-result 3
  29. (integer) 1