У меня есть диспетчер заданий с laravel, каждое запущенное задание имеет выбор данных из mysql, и после того, как оно получено, обновляется поле состояния в БД, эта строка в работе.
Но когда выполняется несколько процессов, это может быть выделенным одинаковыми строками, пока он не обновлен.
попытался lockForUpdate()
- не помогло, DB::raw('LOCK TABLES accounts WRITE')
слишком
$lock = Cache::lock('gettingWorker', 5);
$lock->block(6, function () use ($acc)
{
DB::raw('LOCK TABLES accounts WRITE');
$this->worker = Accounts::getFreeAccount()->lockForUpdate()->firstOrFail();
$this->worker->updateStatus('WORKING');
$lock->release();
});
laravel atomi c блокировки не работают в этом случае просто некоторые sleep(1)
работают, но это не дело - потому что тысячи рабочих мест выполняется каждый час