Skip to main content

BITOP

Introduction​

In Dragonfly, as well as in Redis and Valkey, the BITOP command is used to perform bitwise operations between multiple keys and store the result in a destination key. It supports operations like AND, OR, XOR, and NOT. This command is crucial for handling binary data and performing efficient bulk bitwise operations.

Syntax​

BITOP operation destkey key [key ...]
  • Time complexity: O(N)
  • ACL categories: @write, @bitmap, @slow

Parameter Explanations​

  • operation: The bitwise operation to be performed. It can be AND, OR, XOR, or NOT.
  • destkey: The key where the result of the bitwise operation will be stored.
  • key [key ...]: One or more keys containing string values on which the bitwise operation will be applied.

Return Values​

Returns the size of the string stored in the destination key, measured in bytes.

Code Examples​

Basic Example​

Performing a basic bitwise AND operation between two keys:

dragonfly$> SET key1 "foobar"
OK
dragonfly$> SET key2 "abcdef"
OK
dragonfly$> BITOP AND result key1 key2
(integer) 6
dragonfly$> GET result
"\x60\x60\x04\x00\x00\x00"

Combining Multiple Keys with the OR Operation​

Combining three keys using the OR operation:

dragonfly$> SET key1 "\x01"
OK
dragonfly$> SET key2 "\x02"
OK
dragonfly$> SET key3 "\x03"
OK
dragonfly$> BITOP OR result key1 key2 key3
(integer) 1
dragonfly$> GET result
"\x03"

Using the XOR Operation​

Using the XOR operation to combine two keys:

dragonfly$> SET key1 "\x0F"
OK
dragonfly$> SET key2 "\xF0"
OK
dragonfly$> BITOP XOR result key1 key2
(integer) 1
dragonfly$> GET result
"\xFF"

Using the NOT Operation​

Performing the NOT operation on a single key:

dragonfly$> SET key1 "\xAA"  # 10101010 in binary
OK
dragonfly$> BITOP NOT result key1
(integer) 1
dragonfly$> GET result
"\x55" # 01010101 in binary (inverted bits)

Best Practices​

  • Ensure the keys involved in the BITOP operation have values of the same length for predictable results.
  • Use the NOT operation with only one key, as this is the only unary operation in BITOP.

Common Mistakes​

  • Using the NOT operation with more than one key will result in an error.
  • Performing operations on non-string data types can lead to unexpected results or errors.

FAQs​

What happens if the keys have different lengths?​

Redis pads the shorter strings with zero bytes to match the length of the longest string before performing the bitwise operation.

Can I use BITOP with empty keys?​

Yes, but if all keys are empty, the result stored in the destination key will also be an empty string.