正在显示
1 个修改的文件
包含
11 行增加
和
3 行删除
| @@ -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 | + try { | ||
| 70 | $errorFileModel = new ErrorFile(); | 71 | $errorFileModel = new ErrorFile(); |
| 71 | - $lists = $errorFileModel->list(['status'=>0],'id',['id','path'],'asc',2000);//未同步成功的图片及文件 | 72 | + $lists = $errorFileModel->list(['status'=>0],'id',['id','path'],'asc',2000); |
| 72 | foreach ($lists as $v){ | 73 | foreach ($lists as $v){ |
| 74 | + if (!$this->isTaskInQueue($key, $v['id'])) { | ||
| 73 | Redis::lpush($key, $v['id']); | 75 | Redis::lpush($key, $v['id']); |
| 74 | $errorFileModel->edit(['status'=>1],['id'=>$v['id']]); | 76 | $errorFileModel->edit(['status'=>1],['id'=>$v['id']]); |
| 75 | } | 77 | } |
| 78 | + } | ||
| 76 | $task_id = Redis::rpop($key); | 79 | $task_id = Redis::rpop($key); |
| 80 | + } finally { | ||
| 81 | + // 释放锁 | ||
| 82 | + Redis::del($lock_key); | ||
| 83 | + } | ||
| 77 | } | 84 | } |
| 85 | + | ||
| 78 | return $task_id; | 86 | return $task_id; |
| 79 | } | 87 | } |
| 80 | 88 |
-
请 注册 或 登录 后发表评论