Serialize

警告

由于 PHP 内核频繁变更导致 serialize 模块维护成本过高, serialize 模块暂时放弃对 PHP-7.3 以上版本的支持

序列化

1.9.6版本增加了一个新的模块swoole_serialize,是一个高性能的序列化库,与PHP官方提供的serializejson_encode相比,swoole_serialize的不同之处是:

  • 序列化后的结果为二进制格式,只适合机器读取,不适合人读
  • 序列化性能更高,可节省大量CPU资源,基准测试中序列化和反序列化耗时为PHP官方serialize的40%
  • 序列化后的结果数据尺寸更小,可节省内存资源,基准测试中序列化结果尺寸为PHP官方serialize的50%
  • 基准测试脚本 benchmark

serialize模块仅在PHP7或更高版本中可用

相关配置

可修改php.ini配置,在swoole_server中的task功能中使用swoole_serialize对异步任务数据序列化。

swoole.fast_serialize=On

独立扩展

swoole_serialize模块可单独编译安装,不需要依赖swoole扩展。


  • ~lllllliang

    当要序列化的数据很小的时候,swoole_serialize的效率跟serialize差不多甚至更低。 使用官方提供的基准测试脚本 替换$target为:

    $target=array(
        'str' => 'hello world'
    );
    

    运行结果:

    /Users/liang-pc/web/framework/laravel/test.php:443:
    string(8) "json :21"
    /Users/liang-pc/web/framework/laravel/test.php:444:
    string(13) "serialize :35"
    /Users/liang-pc/web/framework/laravel/test.php:445:
    string(10) "swoole :22"
    /Users/liang-pc/web/framework/laravel/test.php:451:
    string(30) "json_encode :0.060508966445923"
    /Users/liang-pc/web/framework/laravel/test.php:458:
    string(30) "json_decode :0.079265832901001"
    /Users/liang-pc/web/framework/laravel/test.php:465:
    string(28) "serialize :0.056942224502563"
    /Users/liang-pc/web/framework/laravel/test.php:472:
    string(30) "unserialize :0.070751905441284"
    /Users/liang-pc/web/framework/laravel/test.php:481:
    string(35) "swoole_serialize :0.091885089874268"
    /Users/liang-pc/web/framework/laravel/test.php:487:
    string(37) "swoole_unserialize :0.071053981781006"