php - 一个大型数组变量的APC内存缓存(22MB)

时间:2012-03-18 05:09:24

标签: php caching apc

我有一个大的2D数组,我将其序列化存储在一个文件中。序列化文件大约为9.5MB,从磁盘读取大约需要0.05秒。要访问该数组,反序列化过程大约需要1.3秒,这太长了。

我想要做的是首先反序列化数组,然后将该数组存储为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 vs .4秒)。起初我也不相信。

TIA

1 个答案:

答案 0 :(得分:0)

APC并不适合存储大的数据。您是否尝试将数据序列化为PHP代码(例如,使用var_dump),并将其写为.php文件以包含在内?但这可能仍然太大而无法处理。