Redis通信协议浅析

Redis协议的3个目标

  • 易于实现
  • 可以高效地被计算机分析
  • 可以很容易地被人类读懂
网络层

采用 TCP 协议交互,默认端口6379。

客户端和服务器发送的命令或数据一律以\r\n结尾。

请求协议格式
*<参数数量> CR LF
$<参数 1 的字节数量> CR LF
<参数 1 的数据> CR LF
...
$<参数 N 的字节数量> CR LF
<参数 N 的数据> CR LF

举个例子

*3
$3
SET
$5
mykey
$7
myvalue

这个命令的实际协议值如下:

"*3\r\n$3\r\nSET\r\n$5\r\nmykey\r\n$7\r\nmyvalue\r\n"
服务端响应

Redis 命令会返回多种不同类型的回复。

通过检查服务器发回数据的第一个字节, 可以确定这个回复是什么类型:

  • 状态回复(status reply)的第一个字节是 +
  • 错误回复(error reply)的第一个字节是 -
  • 整数回复(integer reply)的第一个字节是 :
  • 批量回复(bulk reply)的第一个字节是 $
  • 多条批量回复(multi bulk reply)的第一个字节是 *
使用 Telnet 连接服务

下面执行的命令为

set foo bar 
telnet 192.168.1.56 6379
Trying 192.168.1.56...
Connected to 192.168.1.56.
Escape character is '^]'.
*3
$3
set
$3
foo
$3
bar
+OK

参考 Redis 通信协议

添加新评论