Removes and returns one or more random members from the set value store at key.

This operation is similar to SRANDMEMBER, that returns one or more random elements from a set but does not remove it.

Syntax

The basic syntax of the SPOP command is as follows:

1
SPOP key [count]

By default, the command pops a single member from the set. When provided with the optional count argument, the reply will consist of up to count members, depending on the set’s cardinality.

Note: the count argument is available in version 3.2.0 and later.

Distribution of returned elements

Note that this command is not suitable when you need a guaranteed uniform distribution of the returned elements. For more information about the algorithms used for SPOP, look up both the Knuth sampling and Floyd sampling algorithms.

Available Since

Redis version >= 1.0.0

Time Complexity

Without the count argument O(1), otherwise O(N) where N is the value of the passed count.

ACL Categories

@write, @set, @fast

Return Value

Returns the removed member(s). Returns nil if the set does not exist or is empty.

Example 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
127.0.0.1:6379> SADD myset a b c d e f g
(integer) 7
127.0.0.1:6379> SPOP myset
"a"
127.0.0.1:6379> SMEMBERS myset
1) "g"
2) "b"
3) "d"
4) "f"
5) "c"
6) "e"
127.0.0.1:6379> SPOP myset 3
1) "g"
2) "f"
3) "b"
127.0.0.1:6379> SMEMBERS myset
1) "d"
2) "c"
3) "e"
127.0.0.1:6379>

Example 2

Returns nil if the set does not exist:

1
2
3
127.0.0.1:6379> SPOP ss
(nil)
127.0.0.1:6379>

Returns nil if the set is empty:

1
2
3
4
5
127.0.0.1:6379> SMEMBERS myset
(empty array)
127.0.0.1:6379> SPOP myset
(nil)
127.0.0.1:6379>