redis通信协议和http协议一样是c/s结构,分为请求和响应两部分。
但redis协议要简单的多。因为redis的请求和回复遵循一致的格式。

这里的回复相当于响应。

redis的通信格式

redis的一般格式如下:

  1. *<参数数量> CR LF
  2. $<参数 1 的字节数量> CR LF
  3. <参数 1 的数据> CR LF
  4. ...
  5. $<参数 N 的字节数量> CR LF
  6. <参数 N 的数据> CR LF

第1行的*为标识符,它会标识整个包的属性,是请求还是回复。第1行后紧跟参数的个数。CR LF作为每段有效数据的分割。后面每个参数的前面都会接上该参数的数据长度。
一个redis请求如下:

  1. set mykey myvalue

这个请求会先转化成如下:
这是一个三个参数的请求。
第一个参数的长度为3
该参数的值为:set
第二个参数的长度为5
该参数的值为:mykey
第三个参数的长度:7
该参数的值为:myvalue
进行一定的转化如下:

  1. *3
  2. $3
  3. set
  4. $5
  5. mykey
  6. $7
  7. myvalue

最后转换成通信的字符数组应该如下:”3\r\n$3\r\nSET\r\n$5\r\nmykey\r\n$7\r\nmyvalue\r\n”。
所有redis通信协议的字符数组都如上所示。
我们要做的就是把字符串”set mykey myvalue”转化为如下的字符数组”
3\r\n$3\r\nSET\r\n$5\r\nmykey\r\n$7\r\nmyvalue\r\n”。