redis通信协议和http协议一样是c/s结构,分为请求和响应两部分。
但redis协议要简单的多。因为redis的请求和回复遵循一致的格式。
这里的回复相当于响应。
redis的通信格式
redis的一般格式如下:
*<参数数量> CR LF
$<参数 1 的字节数量> CR LF
<参数 1 的数据> CR LF
...
$<参数 N 的字节数量> CR LF
<参数 N 的数据> CR LF
第1行的*为标识符,它会标识整个包的属性,是请求还是回复。第1行后紧跟参数的个数。CR LF作为每段有效数据的分割。后面每个参数的前面都会接上该参数的数据长度。
一个redis请求如下:
set mykey myvalue
这个请求会先转化成如下:
这是一个三个参数的请求。
第一个参数的长度为3
该参数的值为:set
第二个参数的长度为5
该参数的值为:mykey
第三个参数的长度:7
该参数的值为:myvalue
进行一定的转化如下:
*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通信协议的字符数组都如上所示。
我们要做的就是把字符串”set mykey myvalue”转化为如下的字符数组”3\r\n$3\r\nSET\r\n$5\r\nmykey\r\n$7\r\nmyvalue\r\n”。