PHP 使用 igbinary 取代 serializer

作者: JONE 分类: PHP/MySQL 发布时间: 2018-09-22 14:09

转载自 https://blog.longwin.com.tw/2017/10/php-igbinary-replace-serializer-2017/

ps:其实我还是不太懂


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

发表评论

电子邮件地址不会被公开。 必填项已用*标注