Suggest an editImprove this articleRefine the answer for “How is Redis used in task queues (Celery, Bull, RQ)?”. Your changes go to moderation before they’re published.Approval requiredContentWhat you’re changing🇺🇸EN🇺🇦UAPreviewTitle (EN)Short answer (EN)Redis is often used as a message broker and task-queue backend in systems like Celery, Bull, RQ, Huey, and Sidekiq: tasks get pushed onto a queue with `LPUSH`, and workers pull them with a blocking `BRPOP` (or via `STREAMS` for more advanced scenarios with consumer groups and acknowledgments). **Key point:** it's an ideal fit for this role thanks to instant access, atomic operations, and built-in data structures - Celery uses Redis as both the broker and the result backend, Bull adds task states and priorities through LIST+HASH, and RQ is a minimalist option built on plain LIST.Shown above the full answer for quick recall.Answer (EN)ImageRedis is often used as a **message broker** and **task queue backend**, in systems like **Celery, Bull, RQ, Huey, and Sidekiq**. It's a great fit for this role because it combines **instant access**, **atomic operations**, and **built-in data structures**. Let's break it down: ### 1. What happens in these systems A task queue is the middleman between **the application (the one issuing tasks)** and **workers (the ones executing them)**. Example: 1. The application adds a task to the queue (e.g. "send an email"). 2. Redis stores the task (key → data). 3. A worker pulls the task, runs it, and records the result. Redis plays the role of a **message queue**, where every task is a list element. ### 2. How Redis is used technically Redis has built-in structures that are a great fit for queues: #### `LIST` - Tasks are pushed onto the end of a list: ```javascript LPUSH queue task_1 LPUSH queue task_2 ``` - Workers pull from the front: ```javascript BRPOP queue ``` (`B` = *blocking*, the worker waits for new tasks to appear). *The result:* a simple, reliable FIFO queue (first in, first out). #### `STREAMS` A modern alternative to LIST, supporting: - unique message IDs, - processing acknowledgment, - consumer groups, - replaying tasks on failure. Example: ```javascript XADD queue * field value XREADGROUP GROUP workers w1 COUNT 1 STREAMS queue > ``` *The result:* a distributed, resilient queue with acknowledgments, like Kafka, but simpler. ### 3. How specific systems use Redis #### Celery (Python) - Redis serves as the **broker** (the task queue) and/or the **result backend** (storing results). - Every task is serialized (as JSON/pickle) and placed into Redis. - Workers pull tasks via `BRPOP` / `XREADGROUP` commands. - After execution, the result is written back. An example configuration: ```python broker_url = 'redis://localhost:6379/0' result_backend = 'redis://localhost:6379/1' ``` #### Bull / BullMQ (Node.js) - Uses **Redis LIST + HASH** to store tasks and their metadata. - Manages task states ("waiting", "active", "completed"). - Workers subscribe to Redis events and process them asynchronously. Bull supports **delayed jobs, retries, and priorities**, all through Redis. #### RQ (Redis Queue, Python) - A minimalist framework built on **Redis LIST**. - Every task is a Python object, serialized and placed on the queue. - Workers pull tasks, run them, and store the result in Redis. A very lightweight option for small projects. ### 4. Why Redis is ideal for queues - **Speed:** `LPUSH`, `BRPOP`, `XADD` operations run in microseconds. - **Atomicity:** operations run to completion, with no races. - **Reliability:** tasks can be acknowledged and reprocessed on failure. - **Flexibility:** support for TTL, priorities, scheduling. - **Simplicity:** no need for complex brokers like RabbitMQ. ### Summary Redis is the heart of queue systems (Celery, Bull, RQ), because: - it writes and hands out tasks fast, - it provides atomicity and blocking operations, - it scales easily to many workers, - it holds state and results. **The formula:** **Redis = an instant broker + a reliable queue + a cache, all in one**.For the reviewerNote to the moderator (optional)Visible only to the moderator. Helps review go faster.