*Redis BITOP 命令 在多个字符串之间执行位运算

*语法

BITOP operation destkey key [key ...]

*说明

BITOP 对多个保存二进制位的 String key 执行位运算,并将结果保存到 destkey

支持的 operation

  • AND:对所有输入 key 求逻辑与。
  • OR:对所有输入 key 求逻辑或。
  • XOR:对所有输入 key 求逻辑异或。
  • NOT:对单个 key 求逻辑非。

除了 NOT 只能接受一个 key 外,其余运算都接受一个或多个 key。

*不同长度字符串的处理

当输入 key 的字符串长度不同时,较短的字符串缺失部分会被视为 0。空 key 也被视为全 0 的字符串。

*返回值

Integer reply:保存到 destkey 的字符串长度,等于输入 key 中最长的字符串长度。

*时间复杂度

O(N),其中 N 为输入 key 中最长字符串的长度。

*版本兼容性

Redis 版本 说明
>= 2.6.0 BITOP 命令可用

*示例

# 准备数据
SET key1 "foobar"
SET key2 "abcdef"

# AND 运算
BITOP AND dest key1 key2
GET dest

# OR 运算
BITOP OR dest key1 key2
GET dest

# XOR 运算
BITOP XOR dest key1 key2
GET dest

# NOT 运算(单 key)
BITOP NOT dest key1
GET dest

# 多 key AND
SET a "\xff\xff"
SET b "\xff\x00"
SET c "\x00\xff"
BITOP AND result a b c
GET result

*使用场景

BITOPBITCOUNT 配合,可对不同 bitmap 进行组合后再做人口统计或特征分析。例如:

  • bitmap A:今天活跃用户
  • bitmap B:会员用户
  • BITOP AND vip-active A B 得到既是会员又活跃的用户,再用 BITCOUNT vip-active 统计人数。

对于超大数据量,为避免阻塞主实例,可将运算逻辑放到从节点或客户端分片执行。