memcached(十五)binary vs text protocols
memcached服务端支持2种传输协议,还有一种XMemcached对于Kestrel的支持实现
textprotocol
文本协议传输的时候,序列化会产生大量的冗余内容。例如255,会使用3个字节。但是调试方便,在服务端可以清晰的看到文本内容。
binaryprotocol
二进制协议传输的时候,序列化产生的内容较少。内容紧凑。比如255,则使用1个字节。但是调试的时候,在服务器上命令行看内容,不容易调试。
Kestrelprotocol(非服务器官方)
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()); } }
结论
笼统的说,追求性能的话,还是二进制协议更好。
相关推荐
郗瑞强 2020-08-16
85590296 2020-07-22
jkzyx 2020-06-29
luotuo 2020-06-26
LinuxJob 2020-06-26
ol0 2020-06-26
清溪算法君老号 2020-06-25
86251043 2020-06-13
CSDN0BLOG 2020-06-09
ol0 2020-05-26
andyhuabing 2020-05-22
程序员俱乐部 2020-05-06
83530391 2020-05-05
ol0 2020-05-02
83530391 2020-04-09
85590296 2020-03-25
carolAnn 2020-03-07
大脸猫脸大 2020-03-03
ol0 2020-02-18