凡是网络通信,皆需要双方遵守一致的协议才能互联。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.世上最短的咒语,是你爱人的名字。 2.有时候也想离开你,只是不放心把你交给...
尽管首批运行 Windows 10X 的硬件产品要在数月后亮相,但技术爱好者们已经迫不及...
目前,国内政策主要围绕着5G的建设和应用展开。工信部发布了《基础电子元器件产...
作为一个声明式的UI框架,SwiftUI帮我们处理了几乎所有关于UI和数据之间的交互,...
Google 如何在短短几秒钟内将整个网页翻译成不同的语言,或者你的手机图库如何根...
日益恶化的空气质量是当今环境最严重的威胁之一。这次衰退主要是由于空气分子污...
本文转载自微信公众号「网优雇佣军」,作者通信。转载本文请联系网优雇佣军公众...
3月16日,彭博社消息称,华为将从2021年开始对5G专利收取使用费。同时首席法务官...
图分析平台提供商TigerGraph宣布,全球技术和自然科学领域的领先大学丹麦工业大...
近年来,因高空抛物、坠物造成的伤害事件屡上报端。水瓶、西瓜皮、易拉罐,甚至...