1.設(shè)置內(nèi)存大小热押,防止內(nèi)存溢出
ini_set('memory_limit','1024M');
2.利用緩存:redis管道(Pipelining)西傀。非阻塞請求/響應(yīng)服務(wù)器能夠?qū)崿F(xiàn)異步處理,即使舊的請求還未被響應(yīng)桶癣,也能處理新的請求拥褂。
a.首先構(gòu)造redis命令的文本文件:set key value......
b.將這些命令轉(zhuǎn)化成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執(zhí)行大量數(shù)據(jù)插入命令
3.批次插入,如:每1000條執(zhí)行一次批量插入語句
$arr = array_chunk($array,5000);
foreach($arr as $k=>$v){
$sql = $queryBuilder->batchInsert('user', ['name', 'age'], $v);
}
4.使用事務(wù)提高插入性能
使用事務(wù)可以在插入出錯時進(jìn)行回滾牙寞。
且在進(jìn)行一個INSERT操作時饺鹃,MySQL內(nèi)部會建立一個事務(wù),在事務(wù)內(nèi)才進(jìn)行真正插入處理操作间雀。通過使用事務(wù)可以減少創(chuàng)建事務(wù)的消耗悔详,所有插入都在執(zhí)行后才進(jìn)行提交操作。