2012-03-18 86 views
0

我有一個很大的2D數組,我將其序列化以存儲在一個文件中。序列化的文件大約9.5MB,從磁盤讀取約需0.05秒。要訪問該數組,反序列化過程大約需要1.3秒,這太長了。php - 大型數組變量的APC內存緩存(22MB)

我想要做的是首先反序列化數組,然後將該數組存儲爲APC緩存變量。當我使用apc_storeapc_add時,我遇到了服務器超時/未找到錯誤的問題。如果我註釋掉apc_store代碼,那麼它會很好,但是數組不會被緩存。緩存較小的測試文件/數組大約1MB沒有問題。從我下面的php代碼中,我發現問題陣列的內存大小約爲22MB。

這些都是在php.ini我APC設置

apc.shm_segments = 1 
apc.shm_size = 512M 
apc.ttl = 7200 
apc.user_ttl = 7200 
apc.num_files_hint = 1024 
apc.enable_cli = 1 
apc.max_file_size = 512M 
apc.stat=1 

我在本地機器上安裝使用XAMPP測試我的代碼。任何人都可以提出如何解決/解決服務器超時問題?

這裏只是我的緩存測試程序:

$startunser = microtime(true); 

if ($quote = apc_fetch('serialfile')) { 

     echo "<br> serfile [cached] "; 
} 
else { 

    $start_memory = memory_get_usage(); 
    $sF = "seri.txt"; 
    $sxx = file_get_contents($sF); 
    $pro = unserialize($sxx); 
    apc_store('serfile', $pro, 10); 

    echo "<br>serfile is NOT cached "; 
    echo memory_get_usage() - $start_memory; 
} 

$elapsedunser = microtime(true) - $startunser; 
echo "<p>The unserialize process took $elapsedunser seconds"; 

return; 

而且作爲一個有趣的方面說明了任何人的好奇心,當我回憶起(使用apc_fetch)從APC的數組,從大約1MB的序列化的文件解序列化,取出過程實際上比從磁盤讀取文件和反序列化文件(.5與.4秒)要長。一開始我也不相信。

TIA

+1

聽起來有錯誤,首先將變量設置爲這麼大。 – 2012-03-18 05:41:49

回答

0

APC是不是真的適合於存儲數據的大。您是否嘗試將數據序列化爲PHP代碼(例如使用var_dump),並將其作爲.php文件寫入以包含在?儘管如此,這可能仍然太大。