`
85977328
  • 浏览: 1872596 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

memcached(十五)binary vs text protocols

 
阅读更多
memcached服务端支持2种传输协议,还有一种XMemcached对于Kestrel的支持实现

text protocol
文本协议传输的时候,序列化会产生大量的冗余内容。例如255,会使用3个字节。但是调试方便,在服务端可以清晰的看到文本内容。

binary protocol
二进制协议传输的时候,序列化产生的内容较少。内容紧凑。比如255,则使用1个字节。但是调试的时候,在服务器上命令行看内容,不容易调试。

Kestrel protocol(非服务器官方)
1 发包服务持续将数据SET到队列KQ中
2 收包服务持续将数据从队列KE中GET出来
FIFO,适用于异步消息传输。
Kestrel基本参照Memcached协议,可恢复,确保服务重启后可以保存重启前的消息队列,不会丢消息。依靠XMemcahed,可以做Kestrel集群,分布式扩充Kestrel服务。


代码示例
package com.panguso.phl;

import net.rubyeye.xmemcached.MemcachedClientBuilder;
import net.rubyeye.xmemcached.XMemcachedClientBuilder;
import net.rubyeye.xmemcached.command.BinaryCommandFactory;
import net.rubyeye.xmemcached.command.KestrelCommandFactory;
import net.rubyeye.xmemcached.command.TextCommandFactory;
import net.rubyeye.xmemcached.utils.AddrUtil;

/**
 * @author piaohailin
 * @date   2014-1-12
*/
public class ProtocolTest {

    /**
     * @param args
     * @author piaohailin
     * @date   2014-1-12
    */
    public static void main(String[] args) {
        MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("10.10.160.155:11211"));
        //二进制协议
        builder.setCommandFactory(new BinaryCommandFactory());
        //文本协议
        builder.setCommandFactory(new TextCommandFactory());
        //FIFO:非官方的
        builder.setCommandFactory(new KestrelCommandFactory());
    }

}



结论
笼统的说,追求性能的话,还是二进制协议更好。

3
0
分享到:
评论
2 楼 cfanllm 2014-11-02  
使用其他的协议就没有这种问题。
1 楼 cfanllm 2014-11-02  
您好,请问在使用binary protocol的时候日志控制台打印出来了乱码,请问这是什么情况呢,请指点!
DEBUG 2014-11-02 23:30:36 net.rubyeye.xmemcached.impl.MemcachedHandler Check session (%s) is alive,send heartbeat
DEBUG 2014-11-02 23:30:36 com.google.code.yanf4j.core.impl.AbstractSession After encoding�
DEBUG 2014-11-02 23:30:36 com.google.code.yanf4j.core.impl.AbstractSession read 30 bytes from channel
DEBUG 2014-11-02 23:30:36 net.rubyeye.xmemcached.impl.Optimizer Optimieze merge buffer:�
DEBUG 2014-11-02 23:30:36 com.google.code.yanf4j.core.impl.AbstractSession read 30 bytes from channel
DEBUG 2014-11-02 23:30:36 com.google.code.yanf4j.core.impl.AbstractSession send buffers:

相关推荐

Global site tag (gtag.js) - Google Analytics