2012-03-18 78 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文件写入以包含在?尽管如此,这可能仍然太大。