Redis通讯协议RESP概述

RESP(Redis Serialization Protocol,Redis序列化协议)是Redis使用的一种通讯协议,用于客户端与Redis服务器之间的数据交互。RESP是一种面向文本的协议,它简单、可读性较好,同时具有高效的序列化和解析性能。RESP协议的设计目标是让开发者在实现Redis客户端时更加方便和快捷,同时也为其它类似的键值存储、消息队列等系统提供了一种简单的通讯协议。

RESP的数据类型

RESP协议定义了几种不同的数据类型,包括简单字符串(Simple String)、错误消息(Error)、整数(Integer)、大块字符串(Bulk String)、数组(Array)等。不同的数据类型在传输时使用不同的格式,并以特定的标识符开头。

  • 1)简单字符串:以 "+" 开头,表示一个文本字符串。
  • 2)错误消息:以 "-" 开头,表示一个错误消息。
  • 3)整数:以 ":" 开头,表示一个整数。
  • 4)大块字符串:以 "$" 开头,后面跟着字符串的长度和实际的字符串内容。
  • 5)数组:以 "*" 开头,后面跟着数组中元素的个数,然后是数组中的每个元素。

RESP的通讯流程

RESP协议的通讯流程通常包括请求和响应两个阶段。

  • 1)请求阶段:客户端向服务端发送一个请求,请求由一个或多个RESP对象组成。例如:SET key value
  • SET key value

    客户端发送的请求是一个RESP数组,以 "*" 开头,后面跟着数组中的元素个数,然后是每个元素的数据类型和数据内容。

    *3
    $3
    SET
    $3
    key
    $5
    value
  • 2)响应阶段:服务端接收到请求后,根据请求进行处理,然后将响应返回给客户端。响应也由一个或多个RESP对象组成。
  • "+OK"

    服务端返回的响应也是一个RESP对象,可以是简单字符串、错误消息、整数、大块字符串或者数组。

    -ERR Error message

通过RESP协议,客户端和服务端可以通过解析和序列化RESP对象来进行数据交互,实现了高效的通讯。