json_encode,serialize,igbinary三种序列化方式,在之前已经有过相关的测试,PHP5.5这方面的测试暂时没有,这次测试基于PHP5.5,并且测试用例,
运行环境
PHP5.5 内存 16G 8核 2.0GMHz
性能&空间大小列表
采用小数组测试结果
json :
156
serialize :
222
igbinary_serialize :
123
json_encode :
0.02264404296875
json_decode :
0.052916049957275
serialize :
0.031183004379272
unserialize :
0.029985904693604
Igbinary Serialize:
0.024919986724854
Igbinary unSerialize:
0.019716024398804
json :
156
serialize :
222
json_encode :
0.1087498664856
json_decode :
0.12652111053467
serialize :
0.041656017303467
unserialize :
0.040987968444824
采用大数组测试结果
综合来说无论从序列化性能还是从占用空间上来说,都是igbinary都是最优选择。但是使用igbinary并非没有代价,在测试中我们发现,调用igbinary_unserialize时,传递非法数据,会导致整个php进程死掉,日志
child
19131
exited on signal
11
(SIGSEGV) after
1.844938
seconds from start
1.844938
seconds from start
估计是因为igbinary为了提升性能,在unserialize时,没有做相关格式验证,导致整个进程异常退出。在使用Redis时,我们先期使用SERIALIZE_PHP方式序列化,为了提升性能,减少对Redis空间的浪费采用igbinary_serialize方式,再切换的时候不小心踩到这个坑,导致服务器响应出错,直接502,幸亏在daily环境上。
转载请注明:苏demo的别样人生 » PHP5.5三种序列化性能对比