作者 邓超

优化同步

... ... @@ -30,16 +30,8 @@ class SyncToEsCmd {
$es = (new Lib\Es\Es('hg_ai_emails'));
$db = db();
$maxNum = 10000; // 最大执行数量
$minTime = 60; // 最小执行时间 秒
$maxTime = 1200; // 最大执行时间 秒
$runTime = time(); // 开始执行时间
while ($maxNum > 0){
// 验证最大执行时间
if(time() - $runTime > $maxTime){
_echo('超过进程最大执行时间');
break;
}
while (1){
// 检查是否接收到信号
pcntl_signal_dispatch();
... ... @@ -48,36 +40,27 @@ class SyncToEsCmd {
_echo('已退出进程');
break;
}
$maxNum--;
$id = redis()->lPop('sync_to_es');
if($id){
$data = $db->first(\Model\listsSql::first('`id` = '.$id));
$data = $db->throw()->first(\Model\listsSql::first('`id` = '.$id));
if($data){
// 设置 进程 是否在运行
$data['is_auto']=$db->count('select count(*) from `lists_auto` where `list_id` = '.$data['id']) ? 1 : 0;
$data['is_auto']=$db->throw()->count('select count(*) from `lists_auto` where `list_id` = '.$data['id']) ? 1 : 0;
$data = $this->getEsData($data);
$doc_id = $data['email_id'].'_'.$data['folder_id'].'_'.$data['uid'];
$code = $es->save($doc_id,$data);
if($code!==200){
sleep(1);
$code = $es->save($doc_id,$data); // 重试一次
}
if($code!==200){
@file_put_contents(LOG_PATH.'/sync_es_fail.log',$id."\n",FILE_APPEND);
redis()->rPush('sync_to_es',$id);
_echo('同步es: '.$doc_id.'===>'.$code);
}
continue;
}
}
// _echo('没有找到数据');
if(time() - $runTime > $minTime){
_echo('最小执行时间 退出');
break;
}
sleep(1);
}
... ...