简介

Redis 的通信协议是 Redis Serialization Protocol,翻译为 Redis 序列化协议,简称 RESP。它具有如下特征:

  • 在 TCP 层
  • 是二进制安全的
  • 基于请求 - 响应模式
  • 简单、易懂(人都可以看懂)

RESP 所描述的是 Redis 客户端 - 服务端的交互方式,掌握了其原理我们基本上就可以撸一个简单的 Redis 客户端

RESP 描述

Redis 协议将传输的结构数据分为 5 种类型,单元结束时统一加上回车换行符号 \r\n。

  • 单行字符串,第一个字节为 +
  • 错误消息,第一个字节为 -
  • 整型数字,第一个字节为 :,后跟整数的字符串
  • 多行字符串,第一个字节为 $,后跟字符串的长度
  • 数组,第一个字节为 *,后跟跟着数组的长度
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // 单行字符串 cherry
    +cherry

    // 错误消息
    -ERR unknown command 'sets'....

    // 整形数字 29
    :29

    // 多行字符串 chenssy
    $7 chenssy

    // 数组 [chenssy,29]
    *2 $7 chenssy $2 29
1
2
3
4
5
6
7
8
9
// set userName chenssy

*3 // *3 数组,表明有三个参数 SET、userName、chenssy
$3 // $3 多行字符串,第一个参数 SET ,有 3 个字符
SET
$8 // $8 多行字符串,第二个参数 userName,有 8 个字符
userName
$7 // // $7 多行字符串,第三个参数 chenssy,有 7 个字符
chenssy

从上面我们可以看出 RESP 协议是非常简单直观的一种协议,我们肉眼都可以看懂,而且数据结构类型也只有少少的 5 中,所以实现起来就变得很简单