1. 程式人生 > >php讀取檔案使用redis的pipeline匯入大批量資料

php讀取檔案使用redis的pipeline匯入大批量資料

第一次寫部落格,哈哈,純屬用來記錄一下自己工作中遇到的問題及解決辦法。

昨天因為工作的需求,需要做一個後臺上傳TXT檔案,讀取其中的內容,然後匯入redis庫中。要求速度快,並且支援至少10W以上的資料,而內容也就一個欄位存類似openid和QQ。我一開始做的時候就老套路,遍歷、hset,然後就發現非常的慢,一千條資料就花了30-32秒,當時就覺得不行,於是就請教了一個大佬,然後就得知了方法


我生成了20W的資料用來做測試,檔案大小6M多。

話不多說,直接貼程式碼了大笑

$lines  = file_get_contents($_FILES['file']['tmp_name']);//獲取檔案內容
ini_set(
'memory_limit', '-1');//不要限制Mem大小,否則會報錯 $line = explode("\r\n",$lines);//轉換成陣列 //例項化redis $redis = new Redis(); //連線 $redis->connect('127.0.0.1', 6379); $redis->pipeline();//開啟管道 if(!$redis){ throw new Exception('redis連線失敗!',1); } $key = $info['key']; $c = 0; $count = count($line); $now = time();
for($i=0;$i<$count;$i++){ $res = $redis->hset($key,$line[$i],1); if($res){ $c ++; } } $redis->exec();

使用結果:


哈哈,即使就直接用time()方法獲取的,是計秒的,沒有毫秒那種效果,不過也可以看出來確實是非常的快,20W的資料不到兩秒就存進去了

其實整個程式碼都非常簡單,能讓redis快速匯入的就是一個點“pipeline”,開啟了這個就可以了。哈哈以前沒有用過,所以就小小的記錄一下。