日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP5.5四种序列化性能对比

發布時間:2025/3/8 php 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP5.5四种序列化性能对比 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

結論:

1、小數組用msgpack,無論空間和性能都最好

2、大數組,考慮空間用igbinary,考慮性能用msgpack


json_encode,serialize,igbinary,msgpack四種序列化方式,在之前已經有過相關的測試,PHP5.5這方面的測試暫時沒有,這次測試基于PHP5.5,并且測試用例,
http://blog.csdn.net/hguisu/article/details/7651730
的測試用例是一樣的,只是從這個測試上家里igbinary serialize的測試,作為對比,可以參考
http://www.ooso.net/archives/538

運行環境
? ? ? ? PHP5.5 內存 16G 8核 2.0GMHz

性能&空間大小列表

采用小數組測試結果(注意為了數據好看,小數組測試時,循環次數為10000次,大數組為1000次)

[html] view plaincopy

  • json?:156??

  • serialize?:222??

  • igbinary_serialize?:123??

  • msgpack?:102??

  • json_encode?:0.22339701652527??

  • json_decode?:0.53043985366821??

  • serialize?:0.31040406227112??

  • unserialize?:0.30859398841858??

  • Igbinary?Serialize:?0.25647687911987??

  • Igbinary?unSerialize:?0.19416117668152??

  • msgpack_pack:?0.14058780670166??

  • msgpack_unpack:?0.29048585891724??

  • 方便對比把之前PHP5.3的測試結果放到下面(之前并未測試igbinary)

    [html] view plaincopy

  • json?:156??

  • serialize?:222??

  • json_encode?:0.1087498664856??

  • json_decode?:0.12652111053467??

  • serialize?:0.041656017303467??

  • unserialize?:0.040987968444824??


  • 采用大數組測試結果

    [html] view plaincopy

  • json?:5350??

  • serialize?:8590??

  • igbinary_serialize?:2432??

  • msgpack?:3929??

  • json_encode?:0.92437314987183??

  • json_decode?:1.791629076004??

  • serialize?:1.3011419773102??

  • unserialize?:1.1485421657562??

  • Igbinary?Serialize:?0.90479803085327??

  • Igbinary?unSerialize:?0.69125699996948??

  • msgpack_pack:?0.52022004127502??

  • msgpack_unpack:?1.0104610919952??

  • 下面是之前的結果(之前并未測試igbinary)

    [html] view plaincopy

  • json?:5350??

  • serialize?:8590??

  • json_encode?:0.90479207038879??

  • json_decode?:1.753741979599??

  • serialize?:1.3566699028015??

  • unserialize?:1.3003630638123??

  • 小結:
    數據方面:
    ? ? ? 1:升級到PHP5.5后,json,serialize,igbinary三種方式序列化后,大小沒有變化,說明這三種格式的對象結構沒有沒有變化,所以可以無縫升級,msgpack由于沒有之前的數據做對比,暫時未知。
    ? ? ? 2:占用空間方面,igbinary節省空間明顯優勢,比如在json一個數組5.4k大小的數據,serialize方式要8.6k,而使用 igbinary方式,僅需2.4k,近乎為serialize方式的1/4,但在小數組方面msgpack方式更具優勢,igbinary占用空間 123,而msgpack方式僅為102。但是在大數組情況下,明顯igbinary方式優勢更明顯。大數組igbinary勝出,小數組msgpack 勝出。
    性能方面:
    ? ? ? 1:在小數據時,json和原生serialize的性能都比PHP5.3版本有所提升,而在處理大數據量時,性能又有所下降。
    ? ? ? 2:在序列化方面,msgpack方式性能最好,其次是json_encode的,再次是igbinary,這兩者相差無幾,最差的為原生 serialize,原生serialize性能消耗大概為json和igbinary方式的的1.4倍左右,而是msgpack方式的2倍。在大數組方 面,序列化方便,基本上和小數組一致,只是igbinary性能教較json_encode方式有所提升。本輪msgpack勝出。
    ? ? ? 3:在反序列方面igbinary的比序列化過程更快,當然也是最快的,但是這種快也是有成本代價的,參見最后的注意事項,最慢的為 json_decode方式,猜測原因可能在于PHP作為服務器端應用,最多的場景是encode,而decode的最常見的為js處理方式,性能不是很 理想。而msgpack反序列化性能基本上是它序列化的2倍。本輪igbinary勝出。
    ? ? ? 4:整體性能對比,整體性能是序列化和反序列化之和,簡單對比會發現,json是最差的,次之是原生serialize,再次為igbinary的方式, 最優的為msgpack,不過igbinary和msgpack相差真的非常小,而在占用空間方面,小數據時msgpack勝出,大數據時 igbinary勝出,算是各有千秋。所以,如果追求極致的性能,可以考慮使用msgpack,如果對是使用空間要求苛刻,那就選擇igbinary方 式,估計這也是PHPRedis選擇igbinary作為內置序列化方式的原因之一,另外還有一個原因,考慮到Redis應用場景多是一寫多讀,要保證反 序列化性能足夠高,非igbinary莫屬。

    使用igbinary并非沒有代價,在測試中我們發現,調用igbinary_unserialize時,傳遞非法數據,會導致整個php進程死掉,日志

    [html] view plaincopy

  • 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環境上。

    轉載于:https://my.oschina.net/jiangchike/blog/475086

    總結

    以上是生活随笔為你收集整理的PHP5.5四种序列化性能对比的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。