PHP 使用 igbinary 取代 serializer

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

相關網頁


關於 Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

本篇發表於 Programming 並標籤為 , , , , , 。將永久鏈結加入書籤。

發表迴響