Sorted Sets
Sorted sets combine the uniqueness of sets with a score for each member, maintaining elements in sorted order. They are ideal for leaderboards, rate limiters, priority queues, and ranking systems.
ZADD / ZSCORE / ZRANK
Add members with scores, retrieve scores, or get the rank (0-based position) of a member. ZADD supports NX, XX, GT, LT, and CH flags.
ZADD key [NX | XX] [GT | LT] [CH] score member [score member ...]
ZSCORE key member
ZRANK key member
ZREVRANK key member> ZADD leaderboard 100 "alice" 85 "bob" 92 "carol"
(integer) 3
> ZSCORE leaderboard "alice"
"100"
> ZRANK leaderboard "bob"
(integer) 0
> ZREVRANK leaderboard "alice"
(integer) 0ZRANGE
The unified range command. Returns members in a range by rank, score, or lexicographic order. Use REV to reverse the order and WITHSCORES to include scores.
ZRANGE key min max [BYSCORE | BYLEX] [REV] [LIMIT offset count] [WITHSCORES]> ZRANGE leaderboard 0 -1 WITHSCORES
1) "bob"
2) "85"
3) "carol"
4) "92"
5) "alice"
6) "100"
> ZRANGE leaderboard 0 2 REV WITHSCORES
1) "alice"
2) "100"
3) "carol"
4) "92"
5) "bob"
6) "85"
> ZRANGE leaderboard 90 100 BYSCORE WITHSCORES
1) "carol"
2) "92"
3) "alice"
4) "100"ZREM / ZCARD / ZCOUNT / ZINCRBY
Remove members, count total or in-range members, and atomically increment a member's score.
> ZCARD leaderboard
(integer) 3
> ZCOUNT leaderboard 90 100
(integer) 2
> ZINCRBY leaderboard 15 "bob"
"100"
> ZREM leaderboard "carol"
(integer) 1ZPOPMIN / ZPOPMAX / BZPOPMIN / BZPOPMAX
Pop members with the lowest or highest scores. The blocking variants wait when the sorted set is empty, useful for priority queue patterns.
> ZADD pq 1 "low" 5 "medium" 10 "high"
(integer) 3
> ZPOPMIN pq
1) "low"
2) "1"
> ZPOPMAX pq
1) "high"
2) "10"
> BZPOPMIN pq 30
1) "pq"
2) "medium"
3) "5"ZUNIONSTORE / ZINTERSTORE / ZDIFFSTORE
Compute and store the union, intersection, or difference of multiple sorted sets. Supports WEIGHTS and AGGREGATE options to control how scores combine.
ZUNIONSTORE dest numkeys key [key ...] [WEIGHTS weight ...] [AGGREGATE SUM|MIN|MAX]> ZADD week1 10 "alice" 20 "bob"
(integer) 2
> ZADD week2 15 "alice" 5 "carol"
(integer) 2
> ZUNIONSTORE total 2 week1 week2
(integer) 3
> ZRANGE total 0 -1 WITHSCORES
1) "carol"
2) "5"
3) "bob"
4) "20"
5) "alice"
6) "25"Command Reference
| Command | Description |
|---|---|
| ZADD | Add members with scores |
| ZSCORE | Get the score of a member |
| ZMSCORE | Get scores of multiple members |
| ZRANK | Get the rank of a member (ascending) |
| ZREVRANK | Get the rank of a member (descending) |
| ZREM | Remove one or more members |
| ZCARD | Get the number of members |
| ZCOUNT | Count members in a score range |
| ZINCRBY | Increment a member's score |
| ZRANGE | Return members by rank, score, or lex range |
| ZPOPMIN | Remove and return lowest-scored members |
| ZPOPMAX | Remove and return highest-scored members |
| BZPOPMIN | Blocking pop of lowest-scored member |
| BZPOPMAX | Blocking pop of highest-scored member |
| ZUNIONSTORE | Store union of sorted sets |
| ZINTERSTORE | Store intersection of sorted sets |
| ZDIFFSTORE | Store difference of sorted sets |
| ZSCAN | Incrementally iterate over members |
| ZRANGEBYSCORE | Return members in a score range (legacy) |
| ZREVRANGEBYSCORE | Return members in a score range, reversed (legacy) |
| ZRANGEBYLEX | Return members in a lexicographic range |