2012-10-27 74 views
0

我有一個更大的查詢形式的MySQL頁面,結果可能超過2MB。因爲我的服務器上沒有足夠的內存(我應該爲mysql安排內存以加快查詢時間),所以我放棄了memcached。相反,它是一個txt文件。php如何鎖定一個文件只有在寫入時才被讀取?

如何將文件鎖定爲這種情況?如果文件是鎖定的,只能讀取,如果文件沒有鎖定,則先寫入然後再讀取。謝謝。

if((time()-filemtime(filename)) > 60){ 
    //mysql_query; query time less than 1.5 seconds 
    if(ex_lock){ // if file is lock, only read 
     file_get_contents($filename); 
    }else{ // if file isn't lock, first write then read 
     file_put_contents($filename, $query_contents);//some file size could be 2mb 
     file_get_contents($filename); 
    } 
} 
+0

你看過[flock](http://us2.php.net/manual/en/function.flock.php)嗎? – quickshiftin

+0

@quickshiftin,我已經嘗試過例子#1,我試過在'if(flock($ fp,LOCK_EX)){'中添加'sleep(20)'',我發現這會鎖定一個文件,睡20秒。 – cj333

+0

有沒有機會看到將原始數據插入/更新到MySQL的代碼片段? – quickshiftin

回答

1

使用flock(),但如果你正在創建2MB數據的結果集,我建議你緩存它們。結果集是否真的需要每隔一秒更新一次?

+0

我已經嘗試過羊羣例子#1,我試過在'if(flock($ fp,LOCK_EX))中加入'sleep') {',我發現這會鎖定文件的讀取和寫入。 – cj333

+0

爲什麼你不想鎖定你的寫操作?如果您嘗試編寫雙打,您最終會得到損壞的數據 – nyson

相關問題