← Back to blog

n8n queue mode Redis: when to leave single-instance mode

A practical guide to n8n queue mode Redis: the signals one instance is no longer coping, the requirements it adds, and the configuration to get right.

Conveyor belt splitting into three lines, showing n8n queue mode Redis handing work to workers

Checked against the cited sources on .

The signals that one instance stops coping

Overloaded single cart beside three evenly loaded carts, contrasting regular mode with queue mode
Conceptual comparison of one overloaded instance versus distributed workers.

If you self host n8n, the first version you run is almost always regular mode: one process that triggers, executes and serves the editor. It works well until production traffic arrives in bursts, and that is usually when n8n queue mode Redis first comes up. According to n8n's self-hosted documentation, regular mode does not limit how many production executions run at the same time, which can leave the event loop thrashing; a ceiling can be set with N8N_CONCURRENCY_PRODUCTION_LIMIT.

That distinction matters when you decide whether n8n queue mode Redis is the right answer. A concurrency limit is protection: it keeps the interface responsive by refusing to run everything at once. Queue mode is throughput: it adds machines that actually do the work. If your instance is only occasionally overwhelmed, try the limit first. If backlog is sustained and the queue never drains, extra capacity is what you need.

n8n's documentation doesn't state an execution volume at which a single instance stops coping, so treat the symptoms below as observations rather than a threshold.

Sources: Control concurrency | Deploy | n8n Docs

How queue mode works and what it requires

Layered scene showing the main instance, Redis queue, workers and shared database in n8n queue mode
Conceptual diagram of the queue-mode topology.

In queue mode the main instance stops executing work itself. It generates an execution and passes the execution ID to Redis, which queues it for the next available worker, according to n8n's documentation. Workers pull jobs, run them and write results to the shared database. Nothing about your workflows changes; only where they run does.

Path of one execution in queue mode

  1. Trigger: The main instance receives the trigger and creates an execution.
  2. Enqueue: It passes the execution ID to Redis rather than running the workflow itself.
  3. Pick up: The next available worker takes the job from the queue.
  4. Execute: The worker runs the workflow, using the shared encryption key to read credentials.
  5. Persist: Results are written to the shared PostgreSQL database.

That split creates real n8n self hosted requirements. A distributed queue-mode setup is not supported over SQLite, so a shared PostgreSQL database must come first. The main instance's encryption key has to be shared with every worker and webhook processor, otherwise they cannot decrypt stored credentials. Redis becomes a component you now operate and monitor.

Edition gates are worth confirming before you plan architecture. Multi-main high availability for queue mode is a self-hosted Enterprise feature, and on n8n Cloud queue mode is limited to Enterprise plans and must be enabled by n8n. Among n8n hosting options, that makes self-hosting the path where you control the topology yourself.

Sources: Enable queue mode | Deploy | n8n Docs, Understand concurrency | Deploy | n8n Docs

Core configuration for n8n queue mode Redis and sizing workers

Switching modes is mostly environment variables. EXECUTIONS_MODE must be set to queue on the main instance and on all workers. Redis connection settings follow n8n's documented defaults: QUEUE_BULL_REDIS_HOST defaults to localhost and the port to 6379, with optional username, password, database index and TLS available.

Sizing is where teams go wrong. n8n recommends setting worker concurrency to 5 or higher, and warns that many workers each running low concurrency can exhaust the database connection pool. So scale the number of workers rather than lowering concurrency. n8n's documentation doesn't give a formula linking worker count to workload, so start small and observe.

Pieces to stand up before switching modes
ComponentRoleWhat to decide
PostgreSQLShared state for all processesMigrate off SQLite first; SQLite is unsupported here
RedisQueues execution IDs for workersHost, port, credentials and whether to enable TLS
Main instanceTriggers and enqueues, serves the editorEXECUTIONS_MODE set to queue
WorkersExecute the queued workflowsConcurrency of 5 or higher, then add more workers
Encryption keyLets workers read stored credentialsThe same key distributed to every process

A February 2025 n8n community walkthrough shows how modest a first n8n queue mode Redis lab can be: a Docker network with Redis, Postgres, a main instance and worker containers all sharing a single env file. It uses plain-text passwords without TLS, so treat it as a lab exercise rather than a production reference.

Sources: Enable queue mode | Deploy | n8n Docs, Queue mode | Deploy | n8n Docs, Queue Mode guide [How to scale up n8n] - English 🇬🇧 - n8n Community

Webhooks, large responses and verification

As an editorial rule of thumb, add dedicated webhook processors only when webhook intake is the actual bottleneck. Whatever you decide, every webhook processor needs the same encryption key as the main instance and the workers, or it cannot read stored credentials.

Large responses deserve attention because in queue mode webhook responses travel through Redis. n8n documents a relay size limit defaulting to 64 MiB and suggests budgeting roughly 1.5 times that value in Redis memory per in-flight response; this is a vendor estimate with no stated measurement method. Offloading oversized bodies with N8N_WEBHOOK_RESPONSE_RELAY_OFFLOAD_ENABLED should be set on workers only after every main and webhook instance runs n8n 2.34.0 or later, and it needs a binary data mode that stores data.

Verification is simple: run a test workflow and confirm it appears in worker logs rather than on the main instance. All of this rests on vendor documentation plus one community post by an individual author, and no independent throughput or latency benchmarks are available here, so measure your own workload before promising capacity.

  1. Migrate the database to PostgreSQL and confirm the instance runs normally on it.
  2. Stand up Redis and reach it from the n8n host.
  3. Set EXECUTIONS_MODE to queue and distribute the shared encryption key to every process.
  4. Start two workers at concurrency 5 or higher and run a test workflow.
  5. Check worker logs to confirm the execution moved off the main instance.
  6. As an editorial rule of thumb, look at separating webhook intake only once it is clearly the bottleneck.

Sources: Enable queue mode | Deploy | n8n Docs, Queue mode | Deploy | n8n Docs

A staged migration you can actually finish

The conclusion is undramatic. If you self host n8n, stay in regular mode with a production concurrency limit for as long as it holds, and move only when sustained backlog says extra capacity is the real need. Confirm edition requirements before you design the topology rather than after.

Among n8n hosting options, n8n queue mode Redis is the point where n8n stops being an app you installed and becomes infrastructure you run. Plan the on-call story and the Redis monitoring alongside the configuration.

Sources: Control concurrency | Deploy | n8n Docs, Enable queue mode | Deploy | n8n Docs

Put this into practice

Keep Restaurant Orders Moving

Recover every valid restaurant order from a paginated API – a service that returns a large result in numbered pages – even when it rate-limits requests or fails unexpectedly.

Advanced

Try a hands-on challenge

For your team

Custom n8n training programs for one team or department, run on your own n8n instance with your own tools and data.

Training for your team