我有一个很大的2D数组,我序列化后存储在一个文件中。序列化的文件大约9.5MB,从磁盘读取约需0.05秒。要访问该数组,反序列化过程大约需要1.3秒,这太长了。
我想要做的是首先反序列化数组,然后将该数组存储为APC缓存变量。当我使用apc_store或apc_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 "
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 "
serfile is NOT cached ";
echo memory_get_usage() - $start_memory;
}
$elapsedunser = microtime(true) - $startunser;
echo "
The unserialize process took $elapsedunser seconds";
return;对于任何人的好奇心,我还记得(使用apc_fetch)一个来自APC的数组,其序列化大约为1MB的序列化文件时,获取过程实际上比从磁盘读取文件和反序列化文件更长.5对比4秒)。一开始我也不相信。
TIA