牛逼的MessagePack

作者: 陈走路Aston | 来源:发表于2017-03-14 11:25 被阅读306次

    今天看Redis,发现Redis支持Message,据说他比JSON更快、更小。那么Message到底是什么?

    MessagePack和JSON的速度比较

    一、MAC、PHP中安装MessagePack:

    1. 下载: http://pecl.php.net/get/msgpack-0.5.2.tgz/usr/local
    2. 解压: sudo tar -zvxf msgpack-0.5.2.tgz
    3. 编译: 进入文件夹执行sudo phpize,sudo ./configure,suido make,sudo make install
    4. 如果看到
      Installing shared extensions: /usr/lib/php/extensions/no-debug-non-zts-20131226/
      Installing header files: /usr/include/php/ 表示安装成功
    5. 拓展: 打开/etc/php.ini 添加extension=msgpack.so
    6. 重启: sudo apachectl restart

    二、使用:

    <?php
      <?php
      $arr = array("name" => "chenjian", "sex" => "男", "marry" => false, "age" => 27);
    
      echo "JSON:".json_encode($arr)."<br>";
      // JSON:{"name":"chenjian","sex":"\u7537","marry":false,"age":27}
    
      echo "JSON长度:".strlen(json_encode($arr))."<br>";
      // JSON长度:57
    
      echo "MessagePack:".msgpack_pack($arr)."<br>";
      // MessagePack:��name�chenjian�sex�男�marry£age�
    
      echo "MessagePack长度:".strlen(msgpack_pack($arr))."<br>";
      // MessagePack长度:35
    

    PS: 你会发现messagepack处理后的字符串比json小,其实messagepack进行了以下核心压缩,对数字、多字节字符、数组等做了很多优化吗,减少了无用的字符,二进制格式。:

    1. true、false 之类的:这些太简单了,直接给1个字节,(0xc2 表示true,0xc3表示false),strlen(msgpack_pack(false)) 长度为1, strlen(json_encode(false))长度为5
    messagepack与json的格式对比1 messagepack与json的格式对比2

    相关文章

      网友评论

        本文标题:牛逼的MessagePack

        本文链接:https://www.haomeiwen.com/subject/hebcnttx.html