Redis 的 BITOP 命令用于对一个或多个保存二进制位的字符串 KEY 进行位操作,并将结果保存到 DESTKEY 上。
当 BITOP 处理不同长度的 字符串 时,较短的那个字符串所缺少的部分会被看作 0 。空的 KEY 也被看作是包含 0 的字符串序列。
192.168.98.70:6379> BITOP OPERATION DESTKEY KEY [KEY ...]
参数 | 作用 |
---|---|
OPERATION | 具体的操作,见下表。 |
DESTKEY | 结果保存的 KEY |
KEY | 需要操作的 KEY |
OPERATION 可以是 AND 、 OR 、 NOT 、 XOR 这四种操作中的任意一种,具体见下表:
选项 | 描述 |
---|---|
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 作为输入。
保存到 DESTKEY 的字符串的长度,和输入 KEY 中最长的字符串长度相等。
BITOP 的复杂度为 O(N) ,当处理大型矩阵(matrix)或者进行大数据量的统计时,最好将任务指派到附属节点(slave)进行,避免阻塞主节点。
>= 2.6.0
使用 AND 进行与运算
# 与运算
192.168.98.70:6379> SETBIT haicoder-1 0 1 # haicoder-1 = 1001
(integer) 0
192.168.98.70:6379> SETBIT haicoder-1 3 1
(integer) 0
192.168.98.70:6379> SETBIT haicoder-2 0 1 # haicoder-2 = 1011
(integer) 0
192.168.98.70:6379> SETBIT haicoder-2 1 1
(integer) 0
192.168.98.70:6379> SETBIT haicoder-2 3 1
(integer) 0
192.168.98.70:6379> BITOP AND haicoder-and haicoder-1 haicoder-2 #haicoder-and = 1001
(integer) 1
192.168.98.70:6379> GETBIT haicoder-and 0
(integer) 1
192.168.98.70:6379> GETBIT haicoder-and 1
(integer) 0
192.168.98.70:6379> GETBIT haicoder-and 2
(integer) 0
192.168.98.70:6379> GETBIT haicoder-and 3
(integer) 1
192.168.98.70:6379> DEL haicoder-1
(integer) 1
192.168.98.70:6379> DEL haicoder-2
(integer) 1
192.168.98.70:6379> DEL haicoder-and
(integer) 1
我们首先,使用 SETBIT 命令,设置 haicoder-1 的值为 1001。使用 SETBIT 命令,设置 haicoder-2 的值为 1011。
最后,使用 AND 操作,对 haicoder-1 和 haicoder-2 进行与运算,结果存放到 haicoder-and ,结果为 1001。
使用 OR 进行或运算
# 或运算
192.168.98.70:6379> SETBIT haicoder-1 0 1 # haicoder-1 = 1001
(integer) 0
192.168.98.70:6379> SETBIT haicoder-1 3 1
(integer) 0
192.168.98.70:6379> SETBIT haicoder-2 0 1 # haicoder-2 = 1011
(integer) 0
192.168.98.70:6379> SETBIT haicoder-2 1 1
(integer) 0
192.168.98.70:6379> SETBIT haicoder-2 3 1
(integer) 0
192.168.98.70:6379> BITOP OR haicoder-or haicoder-1 haicoder-2
(integer) 1
192.168.98.70:6379> GETBIT haicoder-or 0 #haicoder-and = 1011
(integer) 1
192.168.98.70:6379> GETBIT haicoder-or 1
(integer) 1
192.168.98.70:6379> GETBIT haicoder-or 2
(integer) 0
192.168.98.70:6379> GETBIT haicoder-or 3
(integer) 1
192.168.98.70:6379> DEL haicoder-or
(integer) 1
192.168.98.70:6379> DEL haicoder-1
(integer) 1
192.168.98.70:6379> DEL haicoder-2
(integer) 1
我们首先,使用 SETBIT 命令,设置 haicoder-1 的值为 1001。使用 SETBIT 命令,设置 haicoder-2 的值为 1011。
最后,使用 OR 操作,对 haicoder-1 和 haicoder-2 进行或运算,结果存放到 haicoder-or ,结果为 1011。
使用 NOT 进行非运算
# 非运算
192.168.98.70:6379> SETBIT haicoder-1 0 1 # haicoder-1 = 1001
(integer) 0
192.168.98.70:6379> SETBIT haicoder-1 3 1
(integer) 0
192.168.98.70:6379> BITOP NOT haicoder-not haicoder-1 # haicoder-not = 110
(integer) 1
192.168.98.70:6379> GETBIT haicoder-not 0
(integer) 0
192.168.98.70:6379> GETBIT haicoder-not 1
(integer) 1
192.168.98.70:6379> GETBIT haicoder-not 2
(integer) 1
192.168.98.70:6379> GETBIT haicoder-not 3
(integer) 0
192.168.98.70:6379> DEL haicoder-1
(integer) 1
192.168.98.70:6379> DEL haicoder-2
(integer) 1
192.168.98.70:6379> DEL haicoder-not
(integer) 1
我们首先,使用 SETBIT 命令,设置 haicoder-1 的值为 1001。最后,使用 NOT 操作,对 haicoder-1 进行非运算,结果存放到 haicoder-not ,结果为 110。
Redis 的 BITOP命令 用于对一个或多个保存二进制位的字符串 KEY 进行位操作,并将结果保存到 DESTKEY 上。Redis BITOP 命令语法:
192.168.98.70:6379> BITOP OPERATION DESTKEY KEY [KEY ...]