Redis竟然还有自定义网络通信协议?

发布时间:2025-05-15 10:29:32 作者:益华网络 来源:undefined 浏览量(0) 点赞(1)
摘要:凡是网络通信,皆需要双方遵守一致的协议才能互联。Redis协议在如下几点之间做出了折衷: 实现简单 被计算机快速解析 有一定的可读性 网络层 Redis在TCP端口6379上监听到来的连接,客户端连接到来时,Redis服务器为此创建一个TCP连接。在客户端与服务器端

凡是网络通信,皆需要双方遵守一致的协议才能互联。Redis协议在如下几点之间做出了折衷:

实现简单 被计算机快速解析 有一定的可读性

网络层

Redis在TCP端口6379上监听到来的连接,客户端连接到来时,Redis服务器为此创建一个TCP连接。在客户端与服务器端之间传输的每个Redis命令或者数据都以\r\n结尾。

请求

Redis接收由不同参数组成的命令。一旦收到命令,将会立刻被处理,并响应给客户端。

新的统一请求协议

新的统一协议在Redis 1.2中引入,在Redis 2.0中,成为与Redis服务器通讯的标准方式。

在这个统一协议里,发送给Redis服务端的所有参数都是二进制安全的。

如下是通用形式:

*<number of arguments> CR LF $<number of bytes of argument 1> CR LF <argument data> CR LF ... $<number of bytes of argument N> CR LF <argument data> CR LF 

示例:

➜  ~ nc localhost 6379 keys * *2 $18 user:sign:5:202101 $18 seckill_vouchers:6 

上面的命令看上去像是单引号字符串,所以可在查询中看到每个字节的准确值:

"*2\r\n$18\r\nuser:sign:5:202101\r\n$18\r\nseckill_vouchers:6\r\n"

在Redis的响应中也使用这样的格式。批量回复时,这种格式用于每个参数。实际的统一请求协议是Redis用于返回列表项,并调用 Multi-bulk回复。仅仅是N个以以*\r\n为前缀的不同批量回复,是紧随的参数(批量回复)数目。

响应

Redis用不同的响应类型回复命令。它可能从服务器发送的第一个字节开始校验回复类型:

单行响应

响应的第一个字节将是+

set java edge +OK 

错误消息

响应的第一个字节是-

keys* -ERR unknown command `keys*`, with args beginning with:

整型数字

响应的第一个字节将是:

批量响应

第一个字节将是$

keys * *2 $18 user:sign:5:202101 $18 seckill_vouchers:6 

多个批量响应

响应的第一个字节将是* 

二维码

扫一扫,关注我们

声明:本文由【益华网络】编辑上传发布,转载此文章须经作者同意,并请附上出处【益华网络】及本页链接。如内容、图片有任何版权问题,请联系我们进行处理。

感兴趣吗?

欢迎联系我们,我们愿意为您解答任何有关网站疑难问题!

您身边的【网站建设专家】

搜索千万次不如咨询1次

主营项目:网站建设,手机网站,响应式网站,SEO优化,小程序开发,公众号系统,软件开发等

立即咨询 15368564009
在线客服
嘿,我来帮您!