ZRANK and ZREVRANK for position in Redis - Time & Space Complexity
When using Redis commands like ZRANK and ZREVRANK, it's important to know how the time to find an element's position changes as the sorted set grows.
We want to understand how the work Redis does grows when the number of elements increases.
Analyze the time complexity of the following Redis commands.
# Find the rank of member "user42" in sorted set "scores"
ZRANK scores user42
# Find the reverse rank of member "user42" in sorted set "scores"
ZREVRANK scores user42
These commands return the position of a member in a sorted set, counting from the lowest or highest score.
Look at what Redis does internally to find the member's rank.
- Primary operation: Searching through the sorted set's internal data structure to locate the member.
- How many times: The search depends on the size of the sorted set, as Redis may need to check multiple elements.
As the sorted set grows, finding a member's rank takes more steps, but not one for each element.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 4 steps |
| 100 | About 7 steps |
| 1000 | About 10 steps |
Pattern observation: The steps grow slowly as the set gets bigger, roughly adding one step each time the size multiplies by about 2.
Time Complexity: O(log n)
This means the time to find a member's rank grows slowly and predictably as the sorted set gets larger.
[X] Wrong: "Finding a member's rank takes the same time no matter how big the sorted set is."
[OK] Correct: Actually, Redis uses a data structure that lets it find members faster than checking every element, but it still takes more steps as the set grows.
Understanding how Redis commands scale helps you explain your choices clearly and shows you know how data size affects performance.
"What if the sorted set used a different internal structure, like a simple list? How would the time complexity of ZRANK change?"
Practice
ZRANK return when used on a sorted set?Solution
Step 1: Understand what ZRANK does
ZRANK returns the position of a member in a sorted set ordered by score from lowest to highest.Step 2: Identify the rank type
The rank is zero-based, meaning the lowest score member has rank 0.Final Answer:
The zero-based rank of a member with scores in ascending order -> Option BQuick Check:
ZRANK = ascending zero-based rank [OK]
- Confusing rank with score
- Thinking rank starts at 1
- Mixing ZRANK with ZREVRANK
Solution
Step 1: Recall ZREVRANK command syntax
The syntax is: ZREVRANK key memberStep 2: Apply to given example
Here, key is 'scores' and member is 'user1', so command is ZREVRANK scores user1Final Answer:
ZREVRANK scores user1 -> Option DQuick Check:
ZREVRANK key member syntax [OK]
- Swapping key and member order
- Using ZRANK instead of ZREVRANK
- Adding extra parameters
ZRANK players bob?Solution
Step 1: Sort members by ascending score
Sorted by score ascending: alice(50), carol(60), bob(70)Step 2: Find zero-based rank of 'bob'
bob is third in order, so rank is 2 (0-based)Final Answer:
2 -> Option AQuick Check:
ZRANK ascending order rank = 2 [OK]
- Assuming rank is score
- Confusing ascending with descending order
- Using ZREVRANK result instead
ZREVRANK leaderboard "playerX" but get a null reply. What is the most likely reason?Solution
Step 1: Understand ZREVRANK null reply meaning
Null reply means the member does not exist in the sorted set.Step 2: Check other options
Syntax is correct, empty set would also return null but question implies member missing, and ZREVRANK works only on sorted sets.Final Answer:
"playerX" is not a member of the sorted set "leaderboard" -> Option AQuick Check:
Null reply means member missing [OK]
- Thinking syntax error causes null
- Assuming empty set returns error
- Confusing data types for ZREVRANK
Solution
Step 1: Understand ZREVRANK ranks descending
ZREVRANK ranks members from highest to lowest score, zero-based.Step 2: Sort members descending and find 'y' rank
Descending order: z(30), y(20), x(10). 'y' is second, so rank is 1.Final Answer:
ZREVRANK scores y returns 1 -> Option CQuick Check:
ZREVRANK descending zero-based rank = 1 [OK]
- Mixing ZRANK and ZREVRANK results
- Counting rank starting at 1 instead of 0
- Confusing ascending and descending order
Ready to prove it?
Pass the test and this pattern moves unknown
