Laravel предотвращает расписание: запускается добавление ключа в кеш - PullRequest
0 голосов
/ 18 октября 2018

Всякий раз, когда мое приложение запускает php artisan schedule:run и успешно планирует некоторые задания в любой из моих очередей, оно создает для себя запись кэша в следующем формате:

laravel:framework/schedule-{SCHEDULE_HASH}, где SCHEDULE_HASH - это случайное значение 32символьная строка, я бы понял, если бы этот ключ кеша содержал какие-то значимые данные, но он всегда содержит b:1; в качестве значения.

Какова цель этого значения кеша?Насколько я знаю, как только закончится вызов по расписанию, нам все равно, что произошло, так как мой исполнитель процессов настроен на повторный запуск через 60 секунд, чтобы посмотреть, нужно ли запланировать какие-либо новые задания.

В настоящее время это спам в моем кэше redis с сотнями ключей, и я хотел бы разрешить его, если это возможно.

Единственное, что я могу подумать, это то, что когда запускается schedule:run, тогда Running scheduled command: '/usr/local/bin/php' artisan job:name > '/dev/null' 2?&1 возможно, вторая половина каким-то образом использует Redis в качестве места назначения для хранения, а затем отправляет туда новое значение кэша 1, любоеСправка будет принята с благодарностью.

ОБНОВЛЕНИЕ: Мне интересно, действительно ли то, что я вижу, является мьютексом кеша https://laravel.com/api/5.5/Illuminate/Console/Scheduling/Mutex.html, поскольку я использую функцию onOneServer.Единственное, что даже после завершения моей работы мьютекс не освобождается.

Запланированное задание:

$schedule->command('shop:calculate_remaining_work', [$shop->id])
    ->cron('*/5 * * * *') // per 5 minutes
    ->onOneServer()
    ->withoutOverlapping();

Я ожидаю, что мьютекс будет освобожден после завершения выполнения команды, ноэто не так, мьютекс остается в кеше в течение полных 1440 минут

1 Ответ

0 голосов
/ 18 октября 2018

https://laravel.com/docs/5.7/scheduling

При вызове withoutOverlapping() вы можете передать значение срока действия кэша в минутах.

$schedule->command('emails:send')->withoutOverlapping(10);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...