Skip to content

Sets

A Redis Set is an unordered collection of unique strings. Adding a member that already exists is a no-op — Redis does not create duplicates. This makes Sets ideal for tracking tags, visited pages, or any group where each value should appear exactly once.

SADD and SREM — adding and removing members

Section titled “SADD and SREM — adding and removing members”

SADD key member [member ...] adds one or more members. It returns the count of new members added (duplicates are not counted). SREM key member [member ...] removes members and returns how many were actually present.

127.0.0.1:6379> SADD article:1:tags "redis" "database" "caching"
(integer) 3
127.0.0.1:6379> SADD article:1:tags "redis"
(integer) 0
127.0.0.1:6379> SREM article:1:tags "caching"
(integer) 1
127.0.0.1:6379> SREM article:1:tags "nosql"
(integer) 0
SADD article:1:tags "redis" "database" "caching"
SADD article:1:tags "redis"
SREM article:1:tags "caching"
SREM article:1:tags "nosql"

SMEMBERS key returns all members (order is not guaranteed). SCARD key returns the cardinality (number of members) without fetching them all.

127.0.0.1:6379> SADD user:42:interests "music" "hiking" "redis" "coffee"
(integer) 4
127.0.0.1:6379> SMEMBERS user:42:interests
1) "coffee"
2) "redis"
3) "music"
4) "hiking"
127.0.0.1:6379> SCARD user:42:interests
(integer) 4
SADD user:42:interests "music" "hiking" "redis" "coffee"
SMEMBERS user:42:interests
SCARD user:42:interests

SISMEMBER key member returns 1 if the member exists, 0 if not. This is an O(1) lookup regardless of Set size.

127.0.0.1:6379> SADD seen:urls "https://redis.io" "https://astro.build"
(integer) 2
127.0.0.1:6379> SISMEMBER seen:urls "https://redis.io"
(integer) 1
127.0.0.1:6379> SISMEMBER seen:urls "https://example.com"
(integer) 0
SADD seen:urls "https://redis.io" "https://astro.build"
SISMEMBER seen:urls "https://redis.io"
SISMEMBER seen:urls "https://example.com"

SRANDMEMBER key [count] returns random members without removing them. SPOP key [count] removes and returns random members. Both are useful for sampling, prizes, or random assignments.

127.0.0.1:6379> SADD prize:pool "alpha" "beta" "gamma" "delta" "epsilon"
(integer) 5
127.0.0.1:6379> SRANDMEMBER prize:pool 2
1) "delta"
2) "gamma"
127.0.0.1:6379> SCARD prize:pool
(integer) 5
127.0.0.1:6379> SPOP prize:pool 1
1) "alpha"
127.0.0.1:6379> SCARD prize:pool
(integer) 4
SADD prize:pool "alpha" "beta" "gamma" "delta" "epsilon"
SRANDMEMBER prize:pool 2
SCARD prize:pool
SPOP prize:pool 1
SCARD prize:pool
What does SADD return when you add a member that already exists?
Which command checks membership in O(1) without fetching all members?
What is the difference between SRANDMEMBER and SPOP?
What does SCARD return?