1.设置内存大小,防止内存溢出
ini_set('memory_limit','1024M');
2.利用缓存:redis管道(Pipelining)。非阻塞请求/响应服务器能够实现异步处理,即使旧的请求还未被响应,也能处理新的请求。
a.首先构造redis命令的文本文件:set key value......
b.将这些命令转化成Redis Protocol :"3\r\n$3\r\nset\r\n$3\r\nkey\r\n$5\r\n$5\r\nvalue\r\n"...
c.redis-cli --pipe执行大量数据插入命令
3.批次插入,如:每1000条执行一次批量插入语句
$arr = array_chunk($array,5000);
foreach($arr as $k=>$v){
$sql = $queryBuilder->batchInsert('user', ['name', 'age'], $v);
}
4.使用事务提高插入性能
使用事务可以在插入出错时进行回滚。
且在进行一个INSERT操作时,MySQL内部会建立一个事务,在事务内才进行真正插入处理操作。通过使用事务可以减少创建事务的消耗,所有插入都在执行后才进行提交操作。