将网络的可靠性托付给memcached的binary protocol协议
2023-09-20 10:40:54
memcached的文本协议虽具有一目了然和容易理解的优点,但我们也可以看到这样会带来很多缺点,最致命的缺点就是我们无法很好的扩展我们自己独有自定义指令.这就需要我们使用更有效率的二进制协议。
二进制协议也遵守文本协议的格式,只不过它的内部指令和值是使用二进制来传输的,所以没有了那层字符串转义和反转义的操作,总体而言效率上比文本协议会提升不少.
为了更方便我们理解,先来说一下它的两种指令类型:
- 请求指令:从客户端发送至服务端,获取或存储键值对.
- 响应指令:服务端对客户端请求的回应,包含了操作是否成功的标记及其他相关信息.
二进制协议的格式如下 :
请求格式:
<指令类型><键长度><指令键值><过期时间><数据长度><数据>
响应格式:
<指令类型><状态标志><数据长度><数据>
对于上面的格式,指令类型是由一个字节构成的,它对应着操作行为.键长度和数据长度也是由一个字节构成,它所对应的单位是字节数.指令键值和数据就是实际的值,过期时间就是数据保存的时间.状态标志是一个数字,它标识着当前数据的状态,比如是否成功.
举个例子,当客户端请求设置key的值为"value",并且在30秒后过期,那么请求报文格式如下:
set 0 3 key 30 5 value
服务端收到后,如果存储成功,则会返回如下报文:
STORED 0 0
如果存储失败,则会返回如下报文:
NOT_STORED 1 0
二进制协议和文本协议的主要区别如下:
- 二进制协议传输的数据是以二进制的形式进行传输的,而文本协议则是以ASCII字符进行传输的,由于少了字符串转义和反转义的步骤,所以二进制协议的速度会更快.
- 二进制协议的指令和值都是使用一个字节来表示的,而文本协议则是使用字符串来表示,所以二进制协议更加简洁.
- 二进制协议的响应格式中,状态标志是一个数字,而文本协议的响应格式中,状态标志是一个字符串,因此二进制协议更加直观.
二进制协议的优势主要体现在以下几个方面:
- 效率更高:由于少了字符串转义和反转义的步骤,因此二进制协议的速度会更快.
- 更加简洁:指令和值都是使用一个字节来表示的,因此二进制协议更加简洁.
- 更直观:响应格式中的状态标志是一个数字,因此二进制协议更加直观.
二进制协议的不足之处在于:
- 可读性较差:由于数据是以二进制的形式进行传输的,因此可读性较差.
- 不容易理解:由于指令和值都是使用一个字节来表示的,因此不容易理解.
memcached的binary protocol协议凭借着高效稳定、可靠性高、使用灵活等优势,成为构建分布式缓存系统的理想选择。借助该协议,我们能够将网络中的可靠性托付给memcached,助力应用程序实现数据的一致性和高可用性。
除了二进制协议,memcached还支持JSON协议,JSON协议是目前最流行的数据交换格式之一,它的优点是不但易于编写而且易于理解. memcached的JSON协议的指令类型也是由一个字节来构成,并且键和值都是字符串类型的,更符合现在前端和后端的开发需求,至于效率的话,相比文本协议快了20%左右.
memcached的二进制协议和文本协议各有优缺点,我们可以根据自己的实际情况来选择使用哪种协议.