Sorted Sets
Sorted set commands for storing unique elements with scores, ordered by score.
Commands
Section titled “Commands”| Command | Syntax | Description |
|---|---|---|
| ZADD | ZADD key score member [score member ...] | Add members with scores |
| ZREM | ZREM key member [member ...] | Remove members |
| ZSCORE | ZSCORE key member | Get member’s score |
| ZRANK | ZRANK key member | Get rank (ascending) |
| ZREVRANK | ZREVRANK key member | Get rank (descending) |
| ZCARD | ZCARD key | Count members |
| ZCOUNT | ZCOUNT key min max | Count by score range |
| ZRANGE | ZRANGE key start stop [WITHSCORES] | Get by rank range |
| ZREVRANGE | ZREVRANGE key start stop [WITHSCORES] | Get by rank (descending) |
| ZRANGEBYSCORE | ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] | Get by score range |
| ZINCRBY | ZINCRBY key increment member | Increment member’s score |
| ZREMRANGEBYRANK | ZREMRANGEBYRANK key start stop | Remove by rank range |
| ZREMRANGEBYSCORE | ZREMRANGEBYSCORE key min max | Remove by score range |
Examples
Section titled “Examples”Basic Operations
Section titled “Basic Operations”# Add members with scores127.0.0.1:6379> ZADD leaderboard 100 "alice" 85 "bob" 92 "charlie"(integer) 3
# Get score127.0.0.1:6379> ZSCORE leaderboard "alice""100"
# Get rank (0-indexed, ascending by score)127.0.0.1:6379> ZRANK leaderboard "bob"(integer) 0 # Lowest score
127.0.0.1:6379> ZREVRANK leaderboard "alice"(integer) 0 # Highest scoreRange Queries
Section titled “Range Queries”# Get all by rank (ascending)127.0.0.1:6379> ZRANGE leaderboard 0 -11) "bob"2) "charlie"3) "alice"
# With scores127.0.0.1:6379> ZRANGE leaderboard 0 -1 WITHSCORES1) "bob"2) "85"3) "charlie"4) "92"5) "alice"6) "100"
# Top 3 (descending)127.0.0.1:6379> ZREVRANGE leaderboard 0 2 WITHSCORES1) "alice"2) "100"3) "charlie"4) "92"5) "bob"6) "85"Score Range Queries
Section titled “Score Range Queries”# Get by score range127.0.0.1:6379> ZRANGEBYSCORE leaderboard 85 951) "bob"2) "charlie"
# With limit (pagination)127.0.0.1:6379> ZRANGEBYSCORE leaderboard -inf +inf LIMIT 0 21) "bob"2) "charlie"
# Count in range127.0.0.1:6379> ZCOUNT leaderboard 90 100(integer) 2 # charlie and aliceUpdate Scores
Section titled “Update Scores”# Increment score127.0.0.1:6379> ZINCRBY leaderboard 5 "bob""90" # New score
# Use negative increment to decrease127.0.0.1:6379> ZINCRBY leaderboard -10 "alice""90"Remove Members
Section titled “Remove Members”# Remove specific members127.0.0.1:6379> ZREM leaderboard "bob"(integer) 1
# Remove by rank range (lowest 2)127.0.0.1:6379> ZREMRANGEBYRANK leaderboard 0 1(integer) 2
# Remove by score range127.0.0.1:6379> ZREMRANGEBYSCORE leaderboard 0 50(integer) 1Library Mode (Rust)
Section titled “Library Mode (Rust)”use redlite::Db;
let db = Db::open("mydata.db")?;
// Add membersdb.zadd("leaderboard", &[(100.0, b"alice"), (85.0, b"bob")])?;
// Get scorelet score = db.zscore("leaderboard", b"alice")?; // Option<f64>
// Get ranklet rank = db.zrank("leaderboard", b"alice")?; // Option<i64>
// Range querieslet top10 = db.zrevrange("leaderboard", 0, 9, true)?; // With scores
// Score rangelet in_range = db.zrangebyscore("leaderboard", 80.0, 100.0)?;
// Incrementdb.zincrby("leaderboard", 5.0, b"bob")?;
// Count in rangelet count = db.zcount("leaderboard", 80.0, 100.0)?;Use Cases
Section titled “Use Cases”Leaderboards
Section titled “Leaderboards”ZADD game:leaderboard 1500 "player:1" 1200 "player:2" 1800 "player:3"
# Top 10 playersZREVRANGE game:leaderboard 0 9 WITHSCORES
# Player's rankZREVRANK game:leaderboard "player:1"
# Update score after gameZINCRBY game:leaderboard 50 "player:1"Time-Based Feeds
Section titled “Time-Based Feeds”# Score = Unix timestampZADD feed:user:1 1704067200 "post:100"ZADD feed:user:1 1704153600 "post:101"
# Get recent postsZREVRANGE feed:user:1 0 9
# Get posts from last hourZRANGEBYSCORE feed:user:1 (now-3600) (now)Priority Queues
Section titled “Priority Queues”# Score = priority (lower = higher priority)ZADD tasks 1 "urgent:task1"ZADD tasks 5 "normal:task2"ZADD tasks 10 "low:task3"
# Get highest priority taskZRANGE tasks 0 0ZREM tasks "urgent:task1" # Process and removeRate Limiting
Section titled “Rate Limiting”# Score = timestamp of requestZADD ratelimit:user:1 1704067200000 "req:1"ZADD ratelimit:user:1 1704067201000 "req:2"
# Remove old entries (older than 1 minute)ZREMRANGEBYSCORE ratelimit:user:1 0 (now-60000)
# Check request countZCARD ratelimit:user:1