halaei/bredis

This package is abandoned and no longer maintained. The author suggests using the laravel/framework package instead.

Long polling (blocking pop) for Redis queue driver in Laravel

3.0.0 2017-09-23 11:12 UTC

This package is auto-updated.

Last update: 2022-02-01 13:01:33 UTC


README

Build Status Latest Stable Version Total Downloads Latest Unstable Version License

When do you need bredis?

You need bredis when all of these are applied:

  1. You don't want your jobs to be delayed because your workers are currently sleeping.
  2. You don't want to run queue:work --sleep=0 on current Redis queue driver because it will devour your CPU when there is no job.

Hence, you need your workers to idle-wait for a job and process them just when they arrive, with nearly no delay. With bredis you can happily run queue:work --sleep=0 without worrying about busy waiting and CPU overload.

Installation

1. Install the package via compioser

composer require halaei/bredis

2. Add the service provider to your config/app.php

Halaei\BRedis\BlockingRedisServiceProvider::class

3. Add bredis connections to app/queue.php

'bredis' => [
    'driver'      => 'bredis',
    'connection'  => 'default',
    'queue'       => 'default',
    'retry_after' => 90,
    'timeout'     => 10, //Maximum seconds to wait for a job
],

Please note that if you need to increase 'timeout' in the config array above, you should increase 'retry_after' in the array as well as --timeout in your queue:work commands.

Warning: bredis queue workers don't bother handling jobs that are delayed or reserved. So when using bredis workers, you have to have at least one redis worker as well.

Note: bredis queue driver is 100% compatible with redis driver. In other words, you may push the jobs using redis driver and pop them using bredis, or vice versa.