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”,開啟了這個就可以了。哈哈以前沒有用過,所以就小小的記錄一下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM