Laravel 命令行工具之多线程同步大批量数据 DB连接混乱 解决方案

记一次大批量数据的多进程同步

背景:因为公司的用户标识不完整,所以需要从集团同步一次用户标记数据,用户数据来源是微信,数量级为一百五十万,集团用户数量级为六百万

方案确定下来是集团开了一个查询接口,访问没有频率并发限制,数量级在那呢,我们遍历公司的用户,去查询这些用户的标识来更新

项目使用了laravel,就写了一个命令行脚本,开15个进程去跑

由于时间关系使用了PHP的pcntl_fork实现多进程

核心代码如下:

主要流程是:

首先主进程分配userid给各个子进程,这里使用了redis队列来存储,然后fork子进程,在子进程中pop队列获取分配到的userid范围,再查库组装信息请求集团API,根据返回值标示用户。

因为Laravel封装的redis和DB使用了单例,所有多个进程多钱redis和DB时均有报错:

redis:Error while reading line from the server

mysql:Packets out of order. Expected 1 received 19

嗯,都是多进程读取单例的同一个连接导致的,解决方案:

redis:使用原生PHP的redis连接:

        $redis = new \Redis();
        $re1 = $redis->connect(env(‘REDIS_HOST‘),env(‘REDIS_PORT‘));
        $re2 = $redis->auth(env(‘REDIS_PASSWORD‘));

  

mysql:使用laravel的purge 和reconnetc重新连接

            DB::purge(‘mysql‘);
            DB::reconnect(‘mysql‘);

  

多线程大批量数据问题解决^_^

原文地址:https://www.cnblogs.com/timseng/p/11041470.html

时间: 2024-10-09 07:57:17

Laravel 命令行工具之多线程同步大批量数据 DB连接混乱 解决方案的相关文章

28 个必备的 Linux 命令行工具

28 个必备的 Linux 命令行工具 dstat& sariostat, vmstat, ifstat and much more in one.slurm网络流量图形化工具vim&emacs这个没人不知道吧~screen, dtach,tmux, byobu保持你的终端连接活跃.multitail在不同的窗口查看日志文件.t... dstat & sar iostat, vmstat, ifstat and much more in one. slurm 网络流量图形化工具 v

巧用命令行工具UCloud CLI,轻量操作API管理云资源

截止目前,UCloud已提供Python/Java/Golang等不同语言的API SDK.为进一步降低用户的运维人力投入,又推出了基于Golang SDK的命令行工具CLI(Command Line Interface),提供轻量化的API命令行调用方式,并在GitHub开源(https://github.com/ucloud/ucloud-cli).CLI的命令行交互方式更符合研发运维的操作习惯,并且一些典型使用场景通过CLI也更容易代码化的沉淀和维护. 下面是一些用户遇到的实际场景, 用C

解读keystone-manage命令行工具

本文介绍Icehouse发行版的keystone-manage命令 keystone-manage是用来同keystone服务进行交互的命令行工具,通常该命令只用于不能通过HTTP API完成的操作,比如数据的import/export或数据库迁移等等. 用法 keystone-manage [options] action [additional args] action db_sync //同步数据库 db_version  //打印当前数据库的迁移版本 pki_setup //初始化用来签

NodeJS 安装npm命令行工具

在安装之前,请确保已安装Git和NodeJS. cmd机内命令窗口,输入以下命令: git config --system http.sslcainfo /bin/curl-ca-bundle.crt git clone --recursive git://github.com/isaacs/npm.git cd npm npm install -d 设置国内镜像: npm config set registry http://registry.npmjs.vitecho.com 查看安装信息

BCP是SQL Server中负责导入导出数据的一个命令行工具

BCP是SQL Server中负责导入导出数据的一个命令行工具,它是基于DB-Library的,并且能以并行的方式高效地导入导出大批量的数据.BCP可以将数据库的表或视图直接导出,也能通过SELECT FROM语句对表或视图进行过滤后导出.在导入导出数据时,可以使用默认值或是使用一个格式文件将文件中的数据导入到数据库或将数据库中的数据导出到文件中. 下面将详细讨论如何利用BCP导入导出数据. 1. BCP的主要参数介绍 BCP共有四个动作可以选择. (1) 导入. 这个动作使用in命令完成,后面

django下命令行工具

django-admin.py是Django的一个用户管理任务的命令行工具,manage.py是对django-admin.py的简单包装,每个Django Project里面都包含一个manage.py django-admin常用的命令:startproject 创建一个项目startapp 创建一个apprunserver 运行一个服务器shell 进入django shelldbshell 进入django dbshellcheck 检查django项目完整性flush 清空数据库com

FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑

FFmpeg_Tutorial FFmpeg工具和sdk库的使用demo 一.使用FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑 1.基本介绍 对于每一个从事音视频技术开发的工程师,想必没有一个人对FFmpeg这个名称感到陌生.FFmpeg是一套非常知名的音视频处理的开源工具,它包含了开发完成的工具软件.封装好的函数库以及源代码供我们按需使用.FFmpeg提供了非常强大的功能,可以完成音视频的编码.解码.转码.视频采集.后处理(抓图.水印.封装/解封装.格式转换等),还有流媒体服务等

MySQL--percona-toolkit命令行工具集

Percona Toolkit 是一组高级的命令行工具集,用来管理 MySQL 和系统任务,主要包括:1.主从状态检测及修复2.检测从库复制的延迟3.慢查询.日志分析4.检测MySQL 服务器状态5.从日志和 tcpdump 中检测 1.安装perl相关模块 yum install perl-DBI yum install perl-DBD-MySQL yum install perl-Time-HiRes yum install perl-IO-Socket-SSL 2.下载和安装per依赖包

Vue命令行工具vue-cli

前面的话 Vue.js 提供一个官方命令行工具,可用于快速搭建大型单页应用.该工具提供开箱即用的构建工具配置,带来现代化的前端开发流程.只需几分钟即可创建并启动一个带热重载.保存时静态检查以及可用于生产环境的构建配置的项目 .本文将详细介绍Vue命令行工具vue-cli 概述 Vue-cli是Vue官方提供的用于初始化Vue项目的脚手架工具.使用Vue-cli有以下几大优势 1.Vue-cli是一套成熟的vue项目架构设计,会跟着Vue版本的更迭而更新 2.Vue-cli提供了一套本地的热加载的