Laravel 4.2 阻止同时来自 运行 的查询
Laravel 4.2 prevent query from running at the same time
使用 laravel 4.2,我有一个 Cron 作业,每分钟 运行s,它以类似于此的方式从数据库中获取作业列表:
$records = DB::table('jobs')->where('finished', '=', 0)->
whereBetween('created_at', [Carbon::now(),Carbon::now()->addMinutes(2)])->get();
// Process records
..
完成后,它会将 "finished" 字段更新为 1 。
现在由于 cron 作业每分钟 运行ning,我需要确保如果 cron 作业在前一个作业完成之前开始,它不会 运行 或 [=21] =]相同的记录。
使用事务和 lockForUpdate 解决了这个问题:
DB::beginTransaction();
$records = DB::table('jobs')->where('finished', '=', 0)->lockForUpdate()->get();
// process
DB::commit();
使用 laravel 4.2,我有一个 Cron 作业,每分钟 运行s,它以类似于此的方式从数据库中获取作业列表:
$records = DB::table('jobs')->where('finished', '=', 0)->
whereBetween('created_at', [Carbon::now(),Carbon::now()->addMinutes(2)])->get();
// Process records
..
完成后,它会将 "finished" 字段更新为 1 。
现在由于 cron 作业每分钟 运行ning,我需要确保如果 cron 作业在前一个作业完成之前开始,它不会 运行 或 [=21] =]相同的记录。
使用事务和 lockForUpdate 解决了这个问题:
DB::beginTransaction();
$records = DB::table('jobs')->where('finished', '=', 0)->lockForUpdate()->get();
// process
DB::commit();