今天看Redis,发现Redis支持Message,据说他比JSON更快、更小。那么Message到底是什么?
一、MAC、PHP中安装MessagePack:
- 下载:
http://pecl.php.net/get/msgpack-0.5.2.tgz
到/usr/local
- 解压:
sudo tar -zvxf msgpack-0.5.2.tgz
- 编译: 进入文件夹执行
sudo phpize
,sudo ./configure
,suido make
,sudo make install
- 如果看到
Installing shared extensions: /usr/lib/php/extensions/no-debug-non-zts-20131226/
Installing header files: /usr/include/php/
表示安装成功 - 拓展: 打开
/etc/php.ini
添加extension=msgpack.so
- 重启:
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进行了以下核心压缩,对数字、多字节字符、数组等做了很多优化吗,减少了无用的字符,二进制格式。:
- true、false 之类的:这些太简单了,直接给1个字节,(0xc2 表示true,0xc3表示false),
strlen(msgpack_pack(false))
长度为1,strlen(json_encode(false))
长度为5