*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
*使用场景
BITOP 与 BITCOUNT 配合,可对不同 bitmap 进行组合后再做人口统计或特征分析。例如:
- bitmap A:今天活跃用户
- bitmap B:会员用户
-
BITOP AND vip-active A B得到既是会员又活跃的用户,再用BITCOUNT vip-active统计人数。
对于超大数据量,为避免阻塞主实例,可将运算逻辑放到从节点或客户端分片执行。