作者 lyh

变更数据

@@ -61,20 +61,28 @@ class SyncFile extends Command @@ -61,20 +61,28 @@ class SyncFile extends Command
61 $task_id = Redis::rpop($key); 61 $task_id = Redis::rpop($key);
62 if(empty($task_id)){ 62 if(empty($task_id)){
63 $lock_key = 'sync_file_lock'; 63 $lock_key = 'sync_file_lock';
64 - $lock_ttl = 60; // 锁时间大于当前 锁功能执行时间  
65 - // 尝试获取锁,非阻塞方式 64 + $lock_ttl = 100;
  65 + // 尝试获取锁
66 $lock = Redis::set($lock_key, 1, 'EX', $lock_ttl, 'NX'); 66 $lock = Redis::set($lock_key, 1, 'EX', $lock_ttl, 'NX');
67 if (empty($lock)){ 67 if (empty($lock)){
68 return $task_id; 68 return $task_id;
69 } 69 }
70 - $errorFileModel = new ErrorFile();  
71 - $lists = $errorFileModel->list(['status'=>0],'id',['id','path'],'asc',2000);//未同步成功的图片及文件  
72 - foreach ($lists as $v){  
73 - Redis::lpush($key, $v['id']);  
74 - $errorFileModel->edit(['status'=>1],['id'=>$v['id']]); 70 + try {
  71 + $errorFileModel = new ErrorFile();
  72 + $lists = $errorFileModel->list(['status'=>0],'id',['id','path'],'asc',2000);
  73 + foreach ($lists as $v){
  74 + if (!$this->isTaskInQueue($key, $v['id'])) {
  75 + Redis::lpush($key, $v['id']);
  76 + $errorFileModel->edit(['status'=>1],['id'=>$v['id']]);
  77 + }
  78 + }
  79 + $task_id = Redis::rpop($key);
  80 + } finally {
  81 + // 释放锁
  82 + Redis::del($lock_key);
75 } 83 }
76 - $task_id = Redis::rpop($key);  
77 } 84 }
  85 +
78 return $task_id; 86 return $task_id;
79 } 87 }
80 88