作者 赵彬吉

update

@@ -82,12 +82,22 @@ class SyncSubmitTask extends Command @@ -82,12 +82,22 @@ class SyncSubmitTask extends Command
82 public function getTaskId() 82 public function getTaskId()
83 { 83 {
84 $task_id = Redis::rpop('sync_submit_task'); 84 $task_id = Redis::rpop('sync_submit_task');
  85 + $lockKey = 'lock_sync_submit_task';
85 if (empty($task_id)) { 86 if (empty($task_id)) {
86 - $ids = SyncSubmitTaskModel::where('status', 0)->limit(100)->pluck('id');  
87 - foreach ($ids as $id) {  
88 - Redis::lpush('sync_submit_task', $id); 87 + // 获取锁
  88 + if (Redis::setnx($lockKey, 1)) {
  89 + // 设置锁的过期时间,防止死锁
  90 + Redis::expire($lockKey, 10);
  91 + $ids = SyncSubmitTaskModel::where('status', 0)->limit(100)->pluck('id');
  92 + foreach ($ids as $id) {
  93 + Redis::lpush('sync_submit_task', $id);
  94 + }
  95 + $task_id = Redis::rpop('sync_submit_task');
  96 + Redis::del($lockKey);
  97 + } else {
  98 + // 未获取到锁
  99 + return '';
89 } 100 }
90 - $task_id = Redis::rpop('sync_submit_task');  
91 } 101 }
92 return $task_id; 102 return $task_id;
93 } 103 }