2016-05-15 14 views
0

我要提取800個000行(它的開發環境,在實際也可能是1,甚至1.5萬行)。所述第二步是插入的東西作爲串行化數據轉換成Redis的高速緩存中。從MySQL獲取大量數據。將其插入Redis緩存。無法提高PHP內存限制

我的問題是:

  1. 允許的X字節存儲容量被耗盡,但是......最關鍵的是我不能改變它。

  2. 我看着辦吧,我可以用一部分從MySQL數據庫獲取數據的一部分。但後來第二步是有問題的。到目前爲止,我曾經在Redis中將數據存儲爲字符串類型(序列化PHP數組與MySQL數據)。至今我不知道如何正確地追加獲取數據的每一部分。 (獲取序列化的數據,將其反序列化,然後附加新的數據部分,然後再次序列化是愚蠢的)。

對大數據操作有任何經驗嗎?我不知道如何處理它。

請? :)

最好的問候。

+0

讓我看看,如果我的理解。你是否試圖從服務器內存中的數據庫加載800k行? – NoImaginationGuy

+0

@osnapitzkindle清楚:我試圖管理800k行。它不必被加載成一束。這個過程是:有人把數據放入mysql中。我必須把它放到redis中。其他人從Redis獲取數據並執行某些操作... –

回答

0

在你的情況,我會把你生成內容的文件作爲Redis的SET命令,再執行與Redis的-CLI --pipe的文件,在下面的鏈接你的redis的一塌糊塗插入數據文件應該怎麼看起來像閱讀:

redis mess insertion

<?php 
while ($line = mysqli_fetch_assoc($result)) { 
    $data['data'] = $line['somekey']; // here generate the desired data 
    $data['key'] = 'thekey'; // make the data key 
    $redisCommnand = 'SET '.$data['key'].' '.$data['data']; // here you create the redis insert command line someDataKey 
    file_put_contents('/tmp/data.txt', $redisCommand, FILE_APPEND);// appending the command to redis command file 
} 


// exec command to run the file 
exec('cat data.txt | redis-cli --pipe'); 
// consider removing the data.txt file 
// unlink('/tmp/data.txt');