Redis BITOP命令

Redis BITOP命令教程

Redis 的 BITOP 命令用于对一个或多个保存二进制位的字符串 KEY 进行位操作,并将结果保存到 DESTKEY 上。

当 BITOP 处理不同长度的 字符串 时,较短的那个字符串所缺少的部分会被看作 0 。空的 KEY 也被看作是包含 0 的字符串序列。

Redis BITOP命令语法

192.168.98.70:6379> BITOP OPERATION DESTKEY KEY [KEY ...]

参数

参数 作用
OPERATION 具体的操作,见下表。
DESTKEY 结果保存的 KEY
KEY 需要操作的 KEY

OPERATION选项

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操作

使用 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操作

使用 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操作

使用 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命令教程

Redis 的 BITOP命令 用于对一个或多个保存二进制位的字符串 KEY 进行位操作,并将结果保存到 DESTKEY 上。Redis BITOP 命令语法:

192.168.98.70:6379> BITOP OPERATION DESTKEY KEY [KEY ...]