How to Implement Priority Queues in Redis: Simple Methods Explained

This article explains three ways to add priority handling to Redis queues—using a single list with head insertion, employing separate high‑ and normal‑priority lists with BRPOP, and leveraging score keys with sorting—detailing their advantages, drawbacks, and practical Redis command examples.

Java High-Performance Architecture
Java High-Performance Architecture
Java High-Performance Architecture
How to Implement Priority Queues in Redis: Simple Methods Explained

Single List Implementation

Redis queues normally use left‑push/right‑pop (LPUSH/RPOP) for FIFO behavior. To prioritize a high‑priority task, you can insert it at the head of the list with RPUSH, so the next RPOP retrieves the high‑priority item first.

Advantages: simple implementation. Disadvantages: high‑priority tasks become LIFO, which may not suit all scenarios. Suitable for simple queues with few high‑priority items.

Multiple Queue Implementation

Maintain two lists: one for high‑priority tasks and one for normal tasks. When popping, use Redis' BRPOP command to check the high‑priority list first, then the normal list. redis> BRPOP list1 list2 0 In this command, list1 is the high‑priority queue and list2 is the normal queue. The command returns the first element from the first non‑empty list, effectively processing high‑priority tasks before normal ones.

Score‑Based Implementation

When many priority levels exist, assign a numeric score to each element and sort by that score. Each element is pushed onto a list, and a separate key stores its score.

redis> lpush mylist a
redis> set mylist_score_a 1

redis> lpush mylist b
redis> set mylist_score_b 2

redis> lpush mylist c
redis> set mylist_score_c 3

redis> lpush mylist d
redis> set mylist_score_d 3

redis> sort mylist by mylist_score_* limit 0 1
redis> lrem mylist 0 c

The SORT command orders the list by the associated scores and returns the element with the highest priority (largest score) that was inserted earliest. After processing, LREM removes that element from the list.

Conclusion

Method 1 is the simplest but limited to scenarios with few high‑priority tasks. Method 3 handles complex priority schemes but adds implementation and maintenance overhead. Method 2 offers a balanced, recommended approach for most practical applications, while Methods 1 and 3 can be used as extensions to Redis‑based queue designs.

Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

redispriority-queueData StructuresQueue
Java High-Performance Architecture
Written by

Java High-Performance Architecture

Sharing Java development articles and resources, including SSM architecture and the Spring ecosystem (Spring Boot, Spring Cloud, MyBatis, Dubbo, Docker), Zookeeper, Redis, architecture design, microservices, message queues, Git, etc.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.