PHP Serializer 從最早期的資料格式,一直用到現在,有時候會出一些問題(encode / decode 失敗等等的),所以現在很常使用 json_encode / json_decode 來處理。
現在有出 igbinary 來解決這個問題,而且速度比 serailizer 和 json 快很多。
PHP 使用 igbinary 取代 serializer
在 PHP Session / Memcached 都預設使用 Serializer,所以安裝 igbinary 再來啟用設定會比較快~
- GitHub:igbinary/igbinary: Igbinary is a drop in replacement for the standard php serializer.
- function name:igbinary_serialize 和 igbinary_unserialize
- 註:我是直接拿來取代 Session 和 Memcached 預設使用 Serializer 用而已
Debian / Ubuntu Linux 安裝 PHP igbinary
- $ apt install php-igbinary # php-igbinary - igbinary PHP serializer
安裝完後,於 /etc/php/7.0/mods-available/igbinary.ini 就可以看到下述:(啟用 session 修改)
extension=igbinary.so
session.serialize_handler=igbinary
igbinary.compact_strings=On
; apc.serializer=igbinary
上述我只有將 session 啟用,apc 於 PHP7 已經沒有使用,所以還是關閉。
於 phpinfo() 可以看到由原本的下述改變:
- session.serialize_handler php php
變成
- session.serialize_handler igbinary igbinary
速度測試
<?php ini_set('session.serialize_handler', 'php'); session_start(); $a = array_fill(0, 1000000, rand(1, 9999)); $s = get_microtime(); $SESSION['a'] = $a; $e = getmicrotime() - $s; echo '1 spend: ' . $e * 1000 . " secs\n"; $s = get_microtime(); print_r($SESSION['a'], true); $e = getmicrotime() - $s; echo '2 spend: ' . $e * 1000 . " secs\n"; ?>
測試結果 (時間越短越好)
- igbinary
- 1 spend: 0.011920928955078 secs
- 2 spend: 363.22402954102 secs
- php (serializer)
- 1 spend: 0.03504753112793 secs
- 2 spend: 405.49206733704 secs