Appearance
通信协议
Redis 协议(RESP)是 严格的请求-响应队列模型,特点是:
- 单线程顺序执行命令。
- 主线程一次只能执行一条命令,不存在两个命令并发执行、返回乱序的情况。
- 单连接内严格 FIFO,所以没有像dubbo(通过requestId实现单连接并发请求)、thrift、gRPC等框架的异步调用和并发执行。
- 客户端发的命令进入输入缓冲区。
- Redis 按顺序解析、执行。
- 响应结果按顺序写回。
- 请求和响应是一一对应、严格对齐的,不需要额外的 requestId。
协议格式
RESP 协议格式如下:
- 命令以
*开头,后面跟着命令参数的数量。 - 每个参数以
$开头,后面跟着参数的长度。 - 参数内容以
\r\n结尾。
普通命令格式
以下是一个简单的示例,展示了如何使用 RESP 协议发送和接收命令:
- 发送命令:
*2\r\n$3\r\nSET\r\n$5\r\nhello\r\n - 接收响应:
+OK\r\n
pipline格式
以下是一个简单的示例,展示了如何使用 RESP 协议发送和接收命令:
- 发送命令:
*3\r\n$3\r\nSET\r\n$5\r\nhello\r\n$3\r\nGET\r\n$5\r\nhello\r\n - 接收响应:
+OK\r\n$5\r\nhello\r\n