You need bredis
when all of these are applied:
- You don't want your jobs to be delayed because your workers are currently sleeping.
- 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.
composer require halaei/bredis
Halaei\BRedis\BlockingRedisServiceProvider::class
'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.