Метод Laravel onOneServer() для разрыва планировщика задач с кешем php artisan: очиститьPhp

Кемеровские программисты php общаются здесь
Anonymous
Метод Laravel onOneServer() для разрыва планировщика задач с кешем php artisan: очистить

Сообщение Anonymous »

Мое приложение Laravel работает за балансировщиком нагрузки, и одновременно работают 2 экземпляра EC2. Раньше я управлял cronjob только на одном сервере, но это не идеальный способ, потому что если нагрузка увеличится или произойдет какая-то необычная ошибка, и если инициализируется третий экземпляр EC2, то cronjob запустится и на этом сервере, и мой cronjob выполняет критическую задачу, такую ​​​​как зарядка полосы или срок действия подписки, и если оба сервера выполняют задачу cronjob, то пользователь будет взимать плату за полосу несколько раз.
Поэтому, чтобы решить эту ситуацию, я реализовал распределенную блокировку с помощью Redis. Я изменил драйвер кэша по умолчанию с файла на redis в файле .env. CACHE_DRIVER=redis и в Console/Kernel.php добавлен такой метод onOneServer.

Код: Выделить всё

$schedule->command('subscription:autorenew')->everyMinute()->withoutOverlapping()->onOneServer();
теперь, даже если на обоих серверах включен crontab, он выполняет задачу только на одном сервере, но в моем конвейере развертывания есть команда php artisancache:clear из-за этого блокировка снимается, даже если задача выполняется, и второй сервер также начинает выполнять ту же задачу одновременно.
Есть ли какой-либо встроенный способ Laravel, где я могу установить свой CACHE_DRIVER=file по умолчанию и при этом использовать Redis для распределенной блокировки, чтобы php artisancache:clear не влияет на блокировку кэша Redis?

Подробнее здесь: https://stackoverflow.com/questions/791 ... -cacheclea

Вернуться в «Php»