Redis入门完整教程:客户端通信协议

      最后更新:2022-07-05 08:47:29 手机定位技术交流文章

      几乎所有主流编程语言都有Redis客户端(http://redis.io/clients),
      如果从技术角度来看,雷迪斯之所以如此受欢迎有两个原因:
      首先,客户端与服务端之间的通信协议是建立在TCP协议之上。
      Redis设置RESP(REdis Serialization Protocol)实现器
      家庭与服务端之间的正常交互,该协议简单高效,可由机器分析,方便
      例如,根据RESP的数据,客户会向服务端发送一个“欢迎世界”命令
      的标准,客户端需要将它封入下列格式(每行分隔为rn):
      *3
      $3
      SET
      $5
      hello
      $5
      world
      这允许雷迪斯服务器根据RESP来分析它作为设置问候世界命令,然后执行
      回复的格式如下:
      +OK
      您可以看到,除了命令设置你好世界和返回结果本身的OK之外,它还包含
      下面描述了一些特殊字符和数字。
      1.发送命令格式
      RESP下订单的格式如下: CRLF代表“rn”。
      *< 参数数量 > CRLF
      $< 参数 1 的字节数量 > CRLF
      < 参数 1> CRLF
      ...
      $< 参数 N 的字节数量 > CRLF
      < 参数 N> CRLF
      还是使用命令设置地狱世界来解释。
      参数的数目是三,所以第一个行为是:
      *3
      数字的数目是355,所以以下的行为:
      $3
      SET
      $5
      hello
      $5
      world
      要指出的一点是,上述只是格式化显示的结果,实际传输格式如下
      代码,整个过程,如图4-1所示:
      *3rn$3rnSETrn$5rnhellorn$5rnworldrn
      2.返回结果格式
      如图4-2所示,雷迪斯返回的结果有五个类型:
      ·国家回应: RESP的第一个字符是“+”。
      错误响应: RESP的第一个字母是"-".
      整数响应: RESP的第一个节点是“:”。
      ·字符串响应: RESP的第一个字符串是“$”。
      多个字符串响应: RESP中的第一个字符串是“*”。

      我们知道, redis-cli只能看到最后的执行结果,因为 redis-cli本身就是
      结果分析是根据RESP进行的,所以你不能看到中间结果和 redis - cli.c源的命令
      果的解析结构如下:
      static sds cliFormatReplyTTY(redisReply *r, char *prefix) {
      sds out = sdsempty();
      switch (r->type) {
      case REDIS_REPLY_ERROR:
      //处理错误响应
      case REDIS_REPLY_STATUS:
      //处理状态响应
      case REDIS_REPLY_INTEGER:
      //处理整数响应
      case REDIS_REPLY_STRING:
      //进程字符串响应
      case REDIS_REPLY_NIL:
      //  处理空
      case REDIS_REPLY_ARRAY:
      //处理多个字符串响应
      return out;
      }
      例如,如果您执行set hello world,返回的结果是OK,并且您不能看到添加:
      127.0.0.1:6379> set hello world
      OK
      要看到Redis服务端返回的“真实”结果,你可以使用nc命令和 telnet命令
      指示,甚至写,一个接口程序模拟。 下面是使用nc命令的演示,首先使用
      nc79连接到Redis:
      nc 127.0.0.1 6379
      国家答复:集合世界欢迎的返回是+OK:
      set hello world
      +OK
      错误响应:由于Sethx命令不存在,返回结果是"-"加误
      误消息:

      sethx
      -ERR unknown command 'sethx'
      整数响应:当执行命令结果为整数时,返回是一个整数响应,例如。
      incr,exists,del,dbsize返回是整数,如incr计数返回
      它是整数的加法:
      incr counter
      :1
      字符串响应:当命令执行的结果是一个字符串时,返回的结果是一个字符串返回
      例如, get, hget 返回是字符串,例如, get hello 返回
      对于"$5rnworldrn":
      get hello
      $5
      world
      多个字符串响应:当命令执行结果是多个字符串时,返回结果是多个
      例如,mget、hgetall、range等命令返回多个结果,如以下
      操作:
      首先使用mset来设置多个键对:
      mset java jedis python redis-py
      +OK
      然后执行mget命令返回多个结果,第一个*2代表返回的数目,其次是
      格式与字符串响应一致:
      mget java python
      *2
      $5
      jedis
      $8
      redis-py
      有一件事要指出,无论是一个字符串响应还是多个字符串响应,如果有一个零
      值, 然后返回$-1.
      例如,如果在不存在的键上执行一个获取操作,结果是:
      get not_exist_key
      $-1
      如果批量操作包含一个值为零的结果,则返回的结果如下:
      mget hello not_exist_key java
      *3
      $5
      world
      $-1
      $5
      jedis
      RESP为发送命令和返回结果提供协议格式,各种编程语言可以
      为了使用它来实现相应的Redis客户端,下面两个节将介绍Java和Python编程
      Redis语言的客户端。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/29287.html

          热门文章

          文章分类