Bitmap

BITOP

Perform bitwise operations between strings.

The BITOP command in Redis is used to perform bitwise operations on multiple keys (or Redis strings) and store the result in a destination key. It supports standard logical operations (AND, OR, XOR, NOT) and advanced operations (DIFF, DIFF1, ANDOR, ONE) for complex bit manipulation.

Arguments

operationbody'and' | 'or' | 'xor' | 'not' | 'diff' | 'diff1' | 'andor' | 'one'required

Specifies the type of bitwise operation to perform:

Standard Operations:

  • and: Bitwise AND
  • or: Bitwise OR
  • xor: Bitwise XOR
  • not: Bitwise NOT (only accepts one source key)

Advanced Operations (Redis 8.2+):

  • diff: A bit is set only if it's set in all source bitmaps
  • diff1: A bit is set if it's set in the first key but not in any of the other keys
  • andor: A bit is set if it's set in X and also in one or more of Y1, Y2, ...
  • one: A bit is set if it's set in exactly one source key
destinationKeybodystringrequired

The key to store the result of the operation in.

sourceKeysbody...string[]required

One or more keys to perform the operation on.

Response

integerrequired

The size of the string stored in the destination key.

Standard Operations
// AND operationawait redis.bitop("and", "destKey", "sourceKey1", "sourceKey2");// OR operationawait redis.bitop("or", "destKey", "sourceKey1", "sourceKey2");// XOR operationawait redis.bitop("xor", "destKey", "sourceKey1", "sourceKey2");// NOT operation (only accepts one source key)await redis.bitop("not", "destKey", "sourceKey");
DIFF Operation (Redis 8.2+)
// Set bits in multiple bitmapsawait redis.setbit("bitmap1", 0, 1);await redis.setbit("bitmap1", 1, 1);await redis.setbit("bitmap2", 1, 1);await redis.setbit("bitmap2", 2, 1);// DIFF: bits set in all sourcesawait redis.bitop("diff", "result", "bitmap1", "bitmap2");// Result: bit 1 is set (only bit present in both)
DIFF1 Operation (Redis 8.2+)
// Set bits in bitmapsawait redis.setbit("exclude", 0, 1);await redis.setbit("exclude", 1, 1);await redis.setbit("include1", 1, 1);await redis.setbit("include2", 2, 1);// DIFF1: bits in first key but not in othersawait redis.bitop("diff1", "result", "exclude", "include1", "include2");// Result: bit 0 is set (only in exclude, not in include1 or include2)
ANDOR Operation (Redis 8.2+)
// Set bits in bitmapsawait redis.setbit("required", 0, 1);await redis.setbit("required", 1, 1);await redis.setbit("option1", 1, 1);await redis.setbit("option2", 2, 1);// ANDOR: bits in required AND in at least one optionawait redis.bitop("andor", "result", "required", "option1", "option2");// Result: bit 1 is set (in required AND in option1)
ONE Operation (Redis 8.2+)
// Set bits in multiple sourcesawait redis.setbit("source1", 0, 1);await redis.setbit("source1", 1, 1);await redis.setbit("source2", 1, 1);await redis.setbit("source2", 2, 1);await redis.setbit("source3", 2, 1);// ONE: bits set in exactly one sourceawait redis.bitop("one", "result", "source1", "source2", "source3");// Result: bit 0 is set (only in source1)

Advanced Operations Details (Redis 8.2+)

DIFF

A bit in the destination is set if it is set in all source bitmaps. This is equivalent to the intersection of all source bitmaps.

Use Cases:

  • Finding common features across multiple datasets
  • Identifying users present in all segments
  • Intersection of multiple filters

DIFF1

A bit in the destination is set if it is set in the first key but not in any of the other keys. This finds bits unique to the first bitmap.

Use Cases:

  • Finding exclusive features
  • Identifying users in one segment but not in others
  • Exclusion filtering

ANDOR

A bit in the destination is set if it is set in X and also in one or more of Y1, Y2, .... This implements "X AND (Y1 OR Y2 OR ...)" logic.

Use Cases:

  • Required condition with optional alternatives
  • Users with a required attribute and at least one optional attribute
  • Complex filtering with mandatory and optional criteria

ONE

A bit in the destination is set if it is set in exactly one of the source keys. This finds bits that are unique to a single source.

Use Cases:

  • Finding unique occurrences
  • Identifying exclusive memberships
  • Detecting singular conditions across multiple sets

The advanced operations (DIFF, DIFF1, ANDOR, ONE) are available in Redis 8.2.0 and later.

Loading search…