Redis Sorted Sets
9. Redis Sorted Sets
Section titled “9. Redis Sorted Sets”What is a Sorted Set?
Section titled “What is a Sorted Set?”A Sorted Set is like a Set, but every member has an associated numeric score. Members are stored in ascending order by score, and duplicate members are not allowed (but duplicate scores are fine).
Analogy: A competition scoreboard where each player has a unique name and a score. The board is always sorted from lowest to highest score.
Core Commands
Section titled “Core Commands”# ZADD <key> <score> <member>ZADD leaderboard 1500 "Alice"ZADD leaderboard 2800 "Bob"ZADD leaderboard 2100 "Charlie"ZADD leaderboard 950 "Diana"
# Get members sorted ascending (lowest score first)ZRANGE leaderboard 0 -1# Output: 1) "Diana" 2) "Alice" 3) "Charlie" 4) "Bob"
# Get with scoresZRANGE leaderboard 0 -1 WITHSCORES# Output: "Diana" 950, "Alice" 1500, "Charlie" 2100, "Bob" 2800
# Get top 3 (highest scores — descending)ZREVRANGE leaderboard 0 2 WITHSCORES# Output: "Bob" 2800, "Charlie" 2100, "Alice" 1500
# Get rank of a member (0-indexed, ascending)ZRANK leaderboard "Alice"# Output: (integer) 1
# Get rank from highest (descending)ZREVRANK leaderboard "Bob"# Output: (integer) 0 (Bob is #1)
# Get the score of a specific memberZSCORE leaderboard "Charlie"# Output: "2100"
# Update a scoreZADD leaderboard 3200 "Alice"
# Remove a memberZREM leaderboard "Diana"
# Count members in a score rangeZCOUNT leaderboard 1000 3000Leaderboard Diagram
Section titled “Leaderboard Diagram”flowchart TB Players[Players submit scores] --> ZADD["ZADD leaderboard score member<br/>Score determines rank"] ZADD --> Sorted[Scores stored in ascending order]
Sorted --> ZRANGE["ZRANGE 0 -1 WITHSCORES<br/>Ascending: lowest score first<br/>Diana 950 → Alice 1500 → Charlie 2100 → Bob 2800"] Sorted --> ZREVRANGE["ZREVRANGE 0 -1 WITHSCORES<br/>Descending: highest score first<br/>Bob 2800 → Charlie 2100 → Alice 1500 → Diana 950"] Sorted --> ZRANK["ZRANK 'Alice'<br/>Returns: 1 (0-indexed rank)"] Sorted --> ZCOUNT["ZCOUNT 1000 3000<br/>Count players with score in range"]
style Players fill:#3b82f6,color:#fff style ZADD fill:#7c3aed,color:#fff style Sorted fill:#059669,color:#fff style ZRANGE fill:#f59e0b,color:#fff style ZREVRANGE fill:#f59e0b,color:#fff style ZRANK fill:#ec4899,color:#fff style ZCOUNT fill:#06b6d4,color:#fffReal-time leaderboard: Sorted sets keep the order as scores change. Use
ZADDto update a score, and the member automatically moves to its correct position. Perfect for gaming, trending topics, and real-time rankings.
Real-World Examples
Section titled “Real-World Examples”Example: Gaming Leaderboard
# Players complete a roundZADD game:scores 4500 "player:alice"ZADD game:scores 7200 "player:bob"ZADD game:scores 6100 "player:charlie"
# Show top 10ZREVRANGE game:scores 0 9 WITHSCORES
# Player's rankZREVRANK game:scores "player:alice"Example: Trending Topics (Time-based scoring)
# Use timestamp as scoreZADD trending 1700000000 "redis"ZADD trending 1700000100 "nodejs"
# Get most recently added (latest trending)ZREVRANGE trending 0 4