redis系列6-RESP协议

redis原生的API,如果要发送N个命令,需要发送N个请求。这种比较耗费网络连接,我们可以借用redis提供的Pipeline管道一次发送多个命令执行。
Pipeline管理实际上就是基于RESP协议。

1.RESP协议

RESP(REdis Serialization Protocal)全称是redis序列化协议。redis的请求基本都是命令+参数,所以可以将多个命令按照resp协议进行组合,一起发送。
RESP协议支持5种数据类型:简单字符串(Simple Strings)、错误数据(Errors)、整数(Integers)、批量字符串(Bulk Strings)、数组(Arrays);客户端请求服务器时,会以批量数据类型的数组进行请求封装;服务端发送响应给客户端时,根据命令实现的不同,返回相应的数据类型。不同的数据类型根据请求/响应报文的第一个字节进行区分。
(1)简单字符串类型(Simple Strings)
以+开头,后面跟字符串,以rn结尾;字符串中不能包含r或者n字符。简单字符串类型都是单行数据。

"+OK\r\n"

(2)错误类型(Errors)
类似于简单字符串,错误类型用于返回错误消息给客户端,错误类型以-开头。

"-Error message\r\n"

(3)整型
以:开头,以rn结尾,中间的字符串都由整数组成

:10\r\

(4)批量字符串类型(Bulk Strings)
批量字符串类型,用于表示二进制安全的字符串,最大长度支持512MB。格式如下:以$开头,紧接着是一个用于标识包含传输字符串字节个数的数字,以rn结尾;待传输的字符串数据;以rn结尾标识消息的结束;

    "$6\r\aaa\r\n"

(5)数组类型(Arrays)
以*开头,随后跟一个用于标识数组元素数量的实数,以rn结尾;跟随多个数组元素,每个数组元素都是RESP中的一种数据类型;数组类型可以不同;
这个不举例了。
按照上述协议,一条set命令set key value,按照RESP协议转换为"*3\r\n$3\r\nSET\r\n$3\r\n\key\r\n$5\r\nvalue\r\n"。所以可以将多条命令组合后一次性发送执行。

你可能感兴趣的:(redis)