Удаление всех задач в очереди Laravel Redis

Очень распространённый вопрос: как удалить все задачи в очереди laravel, когда используется драйвер Redis
в Laravel. В этой статье я покажу несколько примеров и способов, как этого добиться. Эти варианты включают в себя, как работу с redis-cli
напрямую, работу с artisan
, реализовав команду laravel redis queue clear
а так же несколько других способов, позволяющие полностью очистить очередь задач в Laravel Redis.
Очистка с помощью Artisan-команды
Используя библиотеку laravel-queue-clear можно без проблем удалить все задачи из очереди, выполнив команду artisan:
php artisan queue:clear [connection] [queue]
Эта команда применима и в случаях использования другого драйвера, помимо Redis.
где [connection] - имя подключения из файла config/queue.php
а [queue] - имя конкретной очереди, которую нужно очистить
Для того, чтобы эта команда стала доступной для выполнения, нужно сначала подключить эту библиотеку через
composer
.
Очистка с помощью Redis-команды
Для того, чтобы удалить все задачи из Redis, нужно подключиться к redis-cli
и выполнить команду:
FLUSHDB
Почитать подробнее о которой можете по ссылке
На скриншоте я использую Docker. Если вы ещё с ним не знакомы, то советую изучить его по этой интерактивной статье.
После чего, открыв страницу по адресу /horizon
, можно увидеть, что все задачи из очереди были вычищены:
Очистка с помощью Redis обёртки из PHP
Для того, чтобы очистить все задачи, можно просто вызвать команду из любого места (контроллера, маршрута, любого другого класса):
\Redis::command('flushdb');
Очистка с помощью Redis, создав консольную команду
Сначала, нужно создать консольную команду:
php artisan make:command ClearRedisQueue --command=flush:redis_queue
После чего, нужно зарегистрировать эту команду в файле app/Console/Kernel.php
:
После чего, в методе handle
, класса ClearRedisQueue
, нужно прописать:
\Redis::command('flushdb');
И теперь, из консоли можно выполнять команду flush:redis_queue
, которая будет выполнять полную очистку Redis очереди.
Очистка с помощью Redis + Tinker
Используя терминал, выполните команду:
php artisan tinker
И далее, выполнив:
\Redis::command('flushdb');

Возможно вы видели, в документации описана команада
queue:flush
, выполнив которую вы очистите все неудачно завершенные задачи:php artisan queue:flush
Резюме
В этой статье я показал, как можно полностью очистить всю очередь в Laravel Redis. Я продемонстрировал несколько способов, но, в основном, все они сводятся к выполнению команды flushdb
в Redis, которая удаляет все задачи из Redis хранилища.