• Redis 通信协议 -- RESP


    Redis是一个CS架构的软件,通信一般分两步(不包括pipeline和PubSub):

    1. 客户端(client)向服务端(server)发送一条命令
    2. 服务端解析并执行命令,返回响应结果给客户端

    因此客户端发送命令的格式、服务端响应结果的格式必须有一个规范,这个规范就是通信协议。

    而在Redis中采用的是 RESP(Redis Serialization Protocol)协议。

    RESP

    • Redis 1.2版本引入了RESP协议
    • Redis 2.0版本中成为与Redis服务端通信的标准,称为RESP2
    • Redis 6.0版本中,从RESP2升级到了RESP3协议,增加了更多数据类型并且支持6.0的新特性–客户端缓存。

    虽然 RESP3 协议非常强,但是它与 RESP2 的兼容性特别差,所以到目前来看仍然使用的是 RESP2 协议。

    在RESP中,通过首字节的字符来区分不同数据类型,常用的数据类型包括5种:

    1. 单行字符串:首字节是 ‘+’ ,后面跟上单行字符串,以CRLF( “\r\n” )结尾。
      例如服务端在返回"OK": “+OK\r\n”

    2. 错误(Errors):首字节是 ‘-’ ,与单行字符串格式一样,只是字符串是异常信息,以 CRLF 结尾。
      例如:“-Error message\r\n”

    3. 数值:首字节是 ‘:’ ,后面跟上数字格式的字符串,以 CRLF 结尾。
      例如:“:10\r\n”

    4. 多行字符串:首字节是 ‘$’ ,然后第二个为int型的整数,表示字符串的长度。总起来看他表示二进制安全的字符串,最大支持512MB,这个和 SDS(动态字符串)是比较像的。以 CRLW 来对字符串的开始和结尾进行一个包装。
      第二位的int型:
      ● 如果大小为0,则代表空字符串:“$0\r\n\r\n”
      ● 如果大小为-1,则代表不存在:" $ -1\r\n"
      例如:$5\r\nhello\r\n $表示为多行字符串,5表示字符串的长度为5,以CPLW来讲字符串包括起来。

    5. 数组:首字节是 ‘*’,后面跟上数组元素个数,再跟上元素,元素数据类型不限。

    例子1:
    *3\r\n
    $3\r\nset\r\n
    $4\r\nname\r\n
    $6\r\n虎哥\r\n

    例子2:
    *3\r\n
    :10\r\n
    $5\r\nhello\r\n
    *2\r\n$3\r\nage\r\n:10\r\n

  • 相关阅读:
    使用jap的specification动态查询的演示案例与一些注意事项
    Linux编译安装libmodbus库
    游戏AI综述
    AVL树插入新节点后调整的四种情况(左单旋、右单旋、双旋)
    前端框架中的路由(Routing)和前端导航(Front-End Navigation)
    docker安装es分词插件ik详情步骤
    虚拟机安装CentOS7教程
    中科磐云—2022广东木马信息获取解析
    建议收藏丨你想了解的动捕内容全在这儿!
    小程序传值对象数值到另一个页面大小限制
  • 原文地址:https://blog.csdn.net/weixin_45970271/article/details/126165730