命令请求的执行过程.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
命令请求的执行过程.pdf

命令请求的执⾏过程 ⼀个命令请求从发送到获得回复的过程中, 客户端和服务器需要完成⼀系 操作。 举个例⼦, 如果我们使⽤客户端执⾏以下命令: redis SET KEY VALUE OK 那么从客户端发送 SET KEY VALUE 命令到获得回复 OK 期间, 客户端和服务器共需 要执⾏以下操作: 1. 客户端向服务器发送命令请求 SET KEY VALUE 。 2. 服务器接收并处理客户端发来的命令请求 SET KEY VALUE , 在数据库中进 ⾏设置操作, 并产⽣命令回复 OK 。 3. 服务器将命令回复 OK 发送给客户端。 4 . 客户端接收服务器返回的命令回复 OK , 并将这个回复打印给⽤户观看。 本节接下来的内容将对这些操作的执⾏细节进⾏补充, 详细地说明客户端和服务器在 执⾏命令请求时所做的各种⼯作。 发送命令请求 Redis 服务器的命令请求来⾃ Redis 客户端, 当⽤户在客户端中键⼊⼀个命令请求 时, 客户端会将这个命令请求转换成协议格式, 然后通过连接到服务器的套接字, 将协议格式的命令请求发送给服务器, 如图 14-1 所⽰。 举个例⼦, 假设客户端执⾏命令: SET KEY VALUE 那么客户端会将这个命令转换成协议: *3\r\n$3\r\nSET\r\n$3\r\nKEY\r\n$5\r\nVALUE\r\n 然后将这段协议内容发送给服务器。 读取命令请求 当客户端与服务器之间的连接套接字因为客户端的写⼊⽽变得可读时, 服务器将调⽤ 命令请求处理器来执⾏以下操作: 1. 读取套接字中协议格式的命令请求, 并将其保存到客户端状态的输⼊缓冲区⾥ ⾯。 2. 对输⼊缓冲区中的命令请求进⾏分析, 提取出命令请求中包含的命令参数, 以 及命令参数的个数, 然后分别将参数和参数个数保存到客户端状态的 argv 属 性和 argc 属性⾥⾯。 3. 调⽤命令执⾏器, 执⾏客户端指定的命令。 继续⽤上⼀个⼩节的 SET 命令为例⼦, 图 14-2 展⽰了程序将命令请求保存到客户端 状态的输⼊缓冲区之后, 客户端状态的样⼦。 之后, 分析程序将对输⼊缓冲区中的协议: *3\r\n$3\r\nSET\r\n$3\r\nKEY\r\n$5\r\nVALUE\r\n 进⾏分析, 并将得出的分析结果保存到客户端状态的 argv 属性和 argc 属性⾥⾯, 如图 14-3 所⽰。 之后, 服务器将通过调⽤命令执⾏器来完成执⾏命令所需的余下步骤, 以下⼏个⼩ 节将分别介绍命令执⾏器所执⾏的⼯作。 命令执⾏器 (1):查找命令实现 命令执⾏器要做的第⼀件事就是根据客户端状态的 argv[0] 参数, 在命令表 (command table )中查找参数所指定的命令, 并将找到的命令保存到客户端状态 的 cmd 属性⾥⾯。 命令表是⼀个字典, 字典的键是⼀个个命令名字,⽐ 如 set 、 get 、 del ,等等; ⽽字典的值则是⼀个个 redisCommand 结 构, 每个redisCommand 结构记录了⼀个 Redis 命令的实现信息, 表 14-1 记录了这 个结构的各个主要属性的类型和作⽤。 表 14-1 redisCommand 结构的主要属性 属性名 类型 作⽤ name char * 命令的名字,⽐如 set 。 函数指针,指向命令的实现函数,⽐ proc redisCommandProc * 如 setCommand 。 redisCommandProc 类型 为typedef void redisCommandProc(red 命令参数的个数,⽤于检查命令请求的格式是否 为负数 -N ,那么表⽰参数的数量⼤于等于 N arity int

文档评论(0)

jackzjh + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档