牛逼的MessagePack

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

牛逼的MessagePack_第1张图片
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

二、使用:

 "chenjian", "sex" => "男", "marry" => false, "age" => 27);

  echo "JSON:".json_encode($arr)."
"; // JSON:{"name":"chenjian","sex":"\u7537","marry":false,"age":27} echo "JSON长度:".strlen(json_encode($arr))."
"; // JSON长度:57 echo "MessagePack:".msgpack_pack($arr)."
"; // MessagePack:��name�chenjian�sex�男�marry£age� echo "MessagePack长度:".strlen(msgpack_pack($arr))."
"; // 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_第2张图片
messagepack与json的格式对比1
牛逼的MessagePack_第3张图片
messagepack与json的格式对比2

你可能感兴趣的:(牛逼的MessagePack)