当比较两个字符串的布尔运算时,如何在redis中使用BITOP命令

时间:2016-08-17 03:17:24

标签: redis boolean-logic

我在redis中关注BITOP命令。 http://redis.io/commands/bitop。 使用snippet命令时如下:

redis> SET key1 "foobar"
OK
redis> SET key2 "abcdef"
OK
redis> BITOP AND dest key1 key2
(integer) 6
redis> GET dest
"`bc`ab"

为什么BITOP AND dest key1 key2返回(整数)6?它是密钥dest的长度。为什么密钥dest的结果是"'bc'ab"。因为在数学理论中,我从未见过两个字符串之间的AND运算。任何人都可以解释我和AND两个字符串的方式吗?非常感谢!

1 个答案:

答案 0 :(得分:2)

BITOP命令对您提供的任何字符串的二进制表示执行按位运算。

为什么BITOP和dest key1 key2返回(整数)6?它是密钥的长度

是的。来自doc:

  

返回值       整数回复       存储在目标键中的字符串大小,等于最长输入字符串的大小。

我从未见过两个字符串之间的AND操作。任何人都可以解释我和AND两个字符串的方法吗?

AND或两个字符串之间的任何按位运算意味着这些字符串的二进制表示之间的操作相同,如果字符串的二进制表示长度不等,则较短的字符串在左边用零填充以匹配较大的字符串(也是在redis BITOP中完成的。)

" foobar"的二进制表示和" abcdef"是(为清晰起见的空间):

"foobar" : 01100110 01101111 01101111 01100010 01100001 01110010 
"abcdef" : 01100001 01100010 01100011 01100100 01100101 01100110 

现在,您可以对它们执行任何按位操作,然后将结果位转换为字符串表示形式。