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

Удаление всех задач в очереди 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-redis

На скриншоте я использую Docker. Если вы ещё с ним не знакомы, то советую изучить его по этой интерактивной статье.

После чего, открыв страницу по адресу /horizon, можно увидеть, что все задачи из очереди были вычищены: horizon_reulst

Очистка с помощью Redis обёртки из PHP

Для того, чтобы очистить все задачи, можно просто вызвать команду из любого места (контроллера, маршрута, любого другого класса):

\Redis::command('flushdb');

Очистка с помощью Redis, создав консольную команду

Сначала, нужно создать консольную команду:

php artisan make:command ClearRedisQueue --command=flush:redis_queue

После чего, нужно зарегистрировать эту команду в файле app/Console/Kernel.php: redis_cli-1

После чего, в методе handle, класса ClearRedisQueue, нужно прописать:

\Redis::command('flushdb');

И теперь, из консоли можно выполнять команду flush:redis_queue, которая будет выполнять полную очистку Redis очереди.

Очистка с помощью Redis + Tinker

Используя терминал, выполните команду:

php artisan tinker

И далее, выполнив:

\Redis::command('flushdb');

tinker

Возможно вы видели, в документации описана команада queue:flush, выполнив которую вы очистите все неудачно завершенные задачи:

php artisan queue:flush

Резюме

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