Ale*_*lex 6 php arrays serialization apc
例:
$arr = array();
for($i = 5; $i < 300000; $i++)
$arr[$i] = 'foo';
apc_store('data', $arr);
Run Code Online (Sandbox Code Playgroud)
这需要15秒.要获得数据需要大约0.7秒.
但是,如果我使用php序列化数据并将其存储起来apc_store('data', serialize($arr));只需1秒钟.
要获取序列化数据然后反序列化,需要花费0.6秒多一点
为什么APC这么慢?
小智 2
apc_sma_info() 提供了一个有趣的信息,也许可以解释为什么会发生。
使用非序列化数据执行 apc_store() 会在block_lists索引中产生以下值:
Array
(
[0] => Array
(
[size] => 608
[offset] => 33152
)
[1] => Array
(
[size] => 5589032
[offset] => 11211992
)
[2] => Array
(
[size] => 2175976
[offset] => 31378408
)
)
Run Code Online (Sandbox Code Playgroud)
手动序列化它们时会产生:
Array
(
[0] => Array
(
[size] => 11178232
[offset] => 33760
)
[1] => Array
(
[size] => 1210040
[offset] => 16801024
)
[2] => Array
(
[size] => 15542104
[offset] => 18012280
)
)
Run Code Online (Sandbox Code Playgroud)
这很奇怪,但似乎通过手动序列化,APC 将第一个和最后一个数据分割成更大的块,从而更好地处理内容。
这似乎不是一件小事,因为我运行了几次这个测试,每次都得到相似的结果。