# Using Redis Sets

> Learn how to use Redis sets, which are unordered and hold each item once, with SADD, SMEMBERS, SISMEMBER, SCARD and SINTER to intersect two sets.

Author: [Flavio Copes](https://flaviocopes.com/about/) | Published: 2020-07-28 | Topics: [Redis](https://flaviocopes.com/tags/redis/) | Canonical: https://flaviocopes.com/redis-sets/

Sets have 2 main differences with lists:

1. sets are not ordered
2. sets only hold an item once

Create a set using

`SADD <setkey> <value>`

The same command is used to add more items to the set.

Example:

```
SADD names "Flavio"
SADD names "Roger"
SADD names "Tony" "Mark" "Jane"
```

Get all the items in a set using `SMEMBERS <setkey>`:

![Redis CLI showing SMEMBERS names command returning Roger, Flavio, and Syd](https://flaviocopes.com/images/redis-sets/Screenshot_2020-03-30_at_16.55.09.png)

Find out if a value is in a set with `SISMEMBER`:

```
SISMEMBER names "Flavio"
```

![Redis CLI showing SISMEMBER commands checking if Flavio and Roger are in the names set](https://flaviocopes.com/images/redis-sets/Screenshot_2020-03-30_at_16.58.41.png)

To know how many items are in a set, use `SCARD`:

```
SCARD names
```

Get (without removing) an item from the set, randomly:

```
SRANDMEMBER names
```

Extract (and remove) an item from the set, casually ordered:

```
SPOP names
```

You can extract multiple items at once:

```
SPOP names 2
```

Remove an item from a set by value:

```
SREM names "Flavio"
```

![Redis CLI showing SREM command removing Flavio from names set, then SMEMBERS showing Roger and Syd](https://flaviocopes.com/images/redis-sets/Screenshot_2020-03-30_at_16.55.31.png)

Get the items contained in 2 different sets, exclusing elements only included in one with `SINTER`:

```
SINTER set1 set2
```

See all the sets commands [here](https://redis.io/commands#set).
