# Redis sets

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.

## Examples

- Store the set of favorited book IDs for users 123 and 456:

```
> SADD user:123:favorites 347
(integer) 1
> SADD user:123:favorites 561
(integer) 1
> SADD user:123:favorites 742
(integer) 1
> SADD user:456:favorites 561
(integer) 1
```

- Check whether user 123 likes books 742 and 299

```
> SISMEMBER user:123:favorites 742
(integer) 1
> SISMEMBER user:123:favorites 299
(integer) 0
```

- Do user 123 and 456 have any favorite books in common?

```
> SINTER user:123:favorites user:456:favorites
1) "561"
```

- How many books has user 123 favorited?

```
> SCARD user:123:favorites
(integer) 3
```

## Limits

The max size of a Redis set is 2^32 - 1 (4,294,967,295) members.

## Basic commands

`SADD`

adds a new member to a set.`SREM`

removes the specified member from the set.`SISMEMBER`

tests a string for set membership.`SINTER`

returns the set of members that two or more sets have in common (i.e., the intersection).`SCARD`

returns the size (a.k.a. cardinality) of a set.

See the complete list of set commands.

## Performance

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 `SMEMBERS`

command.
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.

## Alternatives

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.

Redis sets are frequently used as a kind of index. If you need to index and query your data, consider RediSearch and RedisJSON.

## Learn more

- Redis Sets Explained and Redis Sets Elaborated are two short but thorough video explainers covering Redis sets.
- Redis University's RU101 explores Redis sets in detail.