牛逼的MessagePack

今天看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

推荐阅读更多精彩内容