Introduction to Redis sets
A Redis set is an unordered collection of unique strings (members). You can use Redis sets to efficiently:
- Track unique items (e.g., track all unique IP addresses accessing a given blog post).
- Represent relations (e.g., the set of all users with a given role).
- Perform common set operations such as intersection, unions, and differences.
SADDadds a new member to a set.
SREMremoves the specified member from the set.
SISMEMBERtests a string for set membership.
SINTERreturns the set of members that two or more sets have in common (i.e., the intersection).
SCARDreturns the size (a.k.a. cardinality) of a set.
See the complete list of set commands.
Store the sets of bikes racing in France and the USA. Note that if you add a member that already exists, it will be ignored.
Check whether bike:1 or bike:2 are racing in the US.
Which bikes are competing in both races?
How many bikes are racing in France?
SADD command adds new elements to a set. It's also possible
to do a number of other operations against sets like testing if a given element
already exists, performing the intersection, union or difference between
multiple sets, and so forth.
Here I've added three elements to my set and told Redis to return all the elements. There is no order guarantee with a set. Redis is free to return the elements in any order at every call.
Redis has commands to test for set membership. These commands can be used on single as well as multiple items:
We can also find the difference between two sets. For instance, we may want to know which bikes are racing in France but not in the USA:
There are other non trivial operations that are still easy to implement
using the right Redis commands. For instance we may want a list of all the
bikes racing in France, the USA, and some other races. We can do this using
SINTER command, which performs the intersection between different
sets. In addition to intersection you can also perform
unions, difference, and more. For example
if we add a third race we can see some of these commands in action:
You'll note that the
SDIFF command returns an empty array when the
difference between all sets is empty. You'll also note that the order of sets
SDIFF matters, since the difference is not commutative.
When you want to remove items from a set, you can use the
SREM command to
remove one or more items from a set, or you can use the
SPOP command to
remove a random item from a set. You can also return a random item from a
set without removing it using the
The max size of a Redis set is 2^32 - 1 (4,294,967,295) members.
Most set operations, including adding, removing, and checking whether an item is a set member, are O(1).
This means that they're highly efficient.
However, for large sets with hundreds of thousands of members or more, you should exercise caution when running the
This command is O(n) and returns the entire set in a single response.
As an alternative, consider the
SSCAN, which lets you retrieve all members of a set iteratively.
Sets membership checks on large datasets (or on streaming data) can use a lot of memory. If you're concerned about memory usage and don't need perfect precision, consider a Bloom filter or Cuckoo filter as an alternative to a set.