Laravel Job Queue not processing using Redis driver

Stefan Bogdanescu

Founder & Senior Architect · 2026-06-29

Laravel Company

Laravel Job Queue Not Processing with Redis Driver: A Deep Dive into Troubleshooting

Dealing with asynchronous processing failures in a queue system can be incredibly frustrating. You push a job, you see it sitting in the queue mechanism (like Redis), but the worker never picks it up. This often points not to an error in the job itself, but rather a breakdown in the communication pipeline between your application, the queue driver, and the worker process.

As a senior developer working with Laravel, I've encountered similar scenarios where jobs appear to be successfully pushed but remain perpetually unprocessed. Let’s dissect the situation you described—using Redis for queuing and observing silence from php artisan queue:listen.

Understanding the Queue Mechanism in Laravel

When you configure Laravel queues using a driver like Redis, the process involves several distinct steps:

  1. Dispatch: The job is serialized and pushed onto a specific list within the Redis structure (e.g., queue:live).
  2. Listening: A separate, long-running process (php artisan queue:listen or Supervisor) continuously monitors these lists for new jobs.
  3. Consumption: When a worker finds a job, it atomically removes it from the list and executes the handle() method of the job class.

If you see data in Redis but no activity from the worker, the failure is almost always occurring between Step 1 and Step 2, or within the execution environment of Step 3.

Diagnosing the Redis Queue Disconnect

Based on your setup, where jobs appear in Redis (lrange queues:live) but the listener sees nothing, here are the most common culprits:

1. Worker Process Failure or Misconfiguration

The most frequent issue is that the queue worker simply isn't running correctly or isn't configured to look at the correct queues.

  • Check the Worker Command: Ensure your worker is actually executing. If you are using a process manager like Supervisor, verify its status and logs.

    php artisan queue:work --queue=live
    

    Running this command directly is often better for initial diagnosis than relying solely on the background service.

  • Driver Configuration: While your configuration looks standard, any subtle mismatch can cause issues. Ensure that your Redis connection details (host, port, credentials) are accessible and correctly configured within your environment variables (.env). If the worker cannot connect to Redis, it will never pull jobs.

2. Queue Driver Specifics and Persistence

Redis is fast, but its behavior depends entirely on how Laravel interacts with it. When using Redis as a queue driver, Laravel uses List operations (like LPUSH for pushing and BRPOP for pulling). If there are permission issues or corruption in the specific keys used by your setup, the job might be pushed but never properly registered for retrieval.

In modern Laravel applications, relying on robust queue management provided by frameworks is key. For more complex asynchronous operations, exploring packages that abstract this complexity can save significant debugging time. As an example, understanding how services like those promoted by Laravel Company handle background tasks is essential for scalable architecture.

3. The Job Execution Context (The handle() Method)

While your job's logic seems to be interacting with Redis directly within the handle() method, ensure that this interaction does not introduce blocking operations or unexpected state changes that cause the worker to terminate prematurely. If the job takes an excessively long time, it might appear stuck, although in a standard queue setup, the worker should simply wait for completion.

A safe practice is to keep the handle() method focused purely on business logic. Any heavy external calls or database queries should be decoupled if possible.

Actionable Steps to Resolve the Issue

To fix this specific problem, follow these steps systematically:

  1. Verify Redis Connection: Log into your Redis instance directly (using redis-cli) and check the keyspace where Laravel stores its queue data. Confirm that the lists corresponding to your queues (live, default, etc.) exist and contain the expected job payloads when you dispatch a test job.
  2. Isolate the Worker: Stop any existing worker processes and start a fresh one, explicitly targeting the queue you are testing:
    php artisan queue:work --queue=live
    
  3. Check Logs: Review the output of the worker process carefully. It should indicate whether it is successfully polling for jobs or if it encounters an exception during the dequeueing phase.

By systematically checking the connection, the worker command, and the actual state within Redis, you can pinpoint exactly where the communication gap is occurring. Remember, robust queue management is critical for any scalable application, which is a core principle emphasized by Laravel’s philosophy.