Skip to main content

GETBIT

Introduction​

In Dragonfly, as well as in Redis and Valkey, the GETBIT command is used to retrieve the bit value (either 0 or 1) at a specific position in a string. The command allows you to efficiently access individual bits stored in a string, making it particularly useful for scenarios such as bitwise operations, feature flags, or binary statuses.

Syntax​

GETBIT key offset
  • Time complexity: O(1)
  • ACL categories: @read, @bitmap, @fast

Parameter Explanations​

  • key: The key of the string holding the value where the bit is extracted.
  • offset: The bit offset (zero-based index) to retrieve from. The first bit of the string is at offset 0.

Return Values​

The command will return either 0 or 1, corresponding to the bit value at the specified offset. If the offset exceeds the length of the string (in bits), the command returns 0.

Code Examples​

Basic Example​

Retrieve a bit at a specific position in a string:

# String: example
# Hex: 0x65 0x78 0x61 0x6d 0x70 0x6c 0x65
# Binary: 01100101 01111000 01100001 01101101 01110000 01101100 01100101
dragonfly$> SET mykey "example"
OK
dragonfly$> GETBIT mykey 1
(integer) 1 # The bit at position 1 is 1.
dragonfly$> GETBIT mykey 6
(integer) 0 # The bit at position 6 is 0.

Retrieving Bits Beyond the String Boundaries​

Attempting to retrieve a bit beyond the length of the string:

# The length of the string "example" in bits is 56 (7 characters * 8 bits).
dragonfly$> GETBIT mykey 100
(integer) 0 # Returns 0 because the offset is out of bounds.

Using GETBIT in Binary Flags​

In many use cases, each bit can signify a flag that is either enabled (1) or disabled (0):

dragonfly$> SET flags "\x0F"  # Binary: 00001111 (four flags enabled)
OK
dragonfly$> GETBIT flags 0
(integer) 0 # The first feature is disabled.
dragonfly$> GETBIT flags 4
(integer) 1 # The fifth feature is enabled.

Best Practices​

  • Consider compressing binary representations of data into strings and using GETBIT to check for specific flags or states.
  • If you manage performance-sensitive applications, long strings should be accessed cautiously to avoid performance bottlenecks due to large bit offset calculations.

Common Mistakes​

  • Using byte-level offsets when specifying the offset for GETBIT. The offset parameter works at the bit level, not at the byte level.
  • Assuming that GETBIT modifies the string. This command only reads the specified bit without altering the string.

FAQs​

What happens if the key does not exist?​

If the key does not exist, GETBIT returns 0 by default, as there is no bit set at any offset.

Can I use negative offsets?​

No, the GETBIT command does not support negative offsets. You must provide a non-negative integer.