A priority queue helps you manage tasks or items where some are more important than others. It lets you always get the highest priority item first.
Priority queue pattern in Redis
ZADD key [NX|XX] [CH] [INCR] score member [score member ...] ZPOPMIN key [count] ZRANGE key start stop [WITHSCORES]
Redis uses sorted sets (ZSET) to implement priority queues.
Scores represent priority: lower score means higher priority.
ZADD tasks 1 "task1" 5 "task2" 3 "task3"
ZPOPMIN tasks
ZRANGE tasks 0 0 WITHSCORES
This example adds three tasks with different priorities. Then it shows the highest priority task, removes it, and finally shows the remaining tasks.
ZADD priority_queue 10 "low_priority_task" 1 "high_priority_task" 5 "medium_priority_task" ZRANGE priority_queue 0 0 WITHSCORES ZPOPMIN priority_queue ZRANGE priority_queue 0 -1 WITHSCORES
Adding items (ZADD) and removing the highest priority item (ZPOPMIN) both run fast, usually in O(log n) time.
Use ZPOPMIN to get and remove the highest priority item atomically.
Common mistake: Using higher scores as higher priority. In Redis sorted sets, lower scores mean higher priority.
Use this pattern when you want to process items in order of importance or urgency.
Priority queues let you handle items by importance using Redis sorted sets.
Lower scores mean higher priority in Redis.
Use ZADD to add items and ZPOPMIN to get and remove the highest priority item.
Practice
Solution
Step 1: Understand Redis data structures
Redis offers several data types; sorted sets allow ordering by score.Step 2: Identify priority queue implementation
Priority queues use sorted sets where scores represent priority levels.Final Answer:
Sorted sets with scores representing priority -> Option CQuick Check:
Priority queue = sorted sets with scores [OK]
- Confusing lists with priority queues
- Using hashes which don't order by score
- Thinking strings can manage priority
Solution
Step 1: Identify command to add to sorted sets
ZADD adds members with scores to sorted sets in Redis.Step 2: Match command to priority queue addition
Priority queues use sorted sets, so ZADD is the correct command.Final Answer:
ZADD -> Option BQuick Check:
Add to priority queue = ZADD [OK]
- Using LPUSH which is for lists
- Using HSET which is for hashes
- Using SET which is for strings
ZADD tasks 1 "task1" 3 "task3" 2 "task2" ZPOPMIN tasks
What will be the output of
ZPOPMIN tasks?Solution
Step 1: Understand ZADD insertion
Three tasks added with scores 1, 3, and 2 respectively.Step 2: Understand ZPOPMIN behavior
ZPOPMIN removes and returns the member with the lowest score, which is "task1" with score 1.Final Answer:
["task1", "1"] -> Option AQuick Check:
Lowest score item popped = task1 [OK]
- Picking highest score instead of lowest
- Confusing ZPOPMIN with ZPOPMAX
- Expecting syntax error from valid commands
ZADD queue "task1" 1 ZPOPMIN queue
Solution
Step 1: Check ZADD command syntax
ZADD syntax requires the score before the member, but here member is before score.Step 2: Verify ZPOPMIN behavior
ZPOPMIN removes the lowest score member correctly; no issue here.Final Answer:
ZADD syntax is incorrect; score must come before member -> Option DQuick Check:
ZADD syntax = score before member [OK]
- Swapping score and member in ZADD
- Thinking ZPOPMIN doesn't remove items
- Using wrong data type for priority queue
ZADD jobs 5 "job5" 1 "job1" 3 "job3"
Then you run:
ZPOPMIN jobs 2
What will be the result and what remains in the queue?
Solution
Step 1: Understand ZPOPMIN with count
ZPOPMIN with argument 2 pops two lowest score members.Step 2: Identify lowest scores and remaining items
Lowest scores are 1 (job1) and 3 (job3), so these are popped; job5 with score 5 remains.Final Answer:
Returns ["job1", "1", "job3", "3"]; queue left with ["job5"] -> Option AQuick Check:
ZPOPMIN 2 pops two lowest score items [OK]
- Mixing up scores and members order
- Thinking ZPOPMIN pops highest scores
- Assuming ZPOPMIN can't pop multiple items
Ready to prove it?
Pass the test and this pattern moves unknown
