Redis源码学习之【命令协议格式】

介绍

本来这篇要介绍Redis的命令解析的,但是要想对Redis的命令解析有更直观的了解,必须先了解Redis的命令协议格式。

源码

暂无(或者是是在network.c中吧)

分析

Requests

*<number of arguments> CR LF
$<number of bytes of argument 1> CR LF
<argument data> CR LF
...
$<number of bytes of argument N> CR LF
<argument data> CR LF

Redis最新支持的二进制安全的请求通用格式如上所示。具体的实例有:

*3
$3
SET
$5
mykey
$7
myvalue

转换为实际的每个字节的形式字符串为:"*3\r\n$3\r\nSET\r\n$5\r\nmykey\r\n$7\r\nmyvalue\r\n"。同时这种格式的协议也用于Redis服务器对客户端的回复中,称为Bulk reply。

这种统一请求协议在Redis也被用于向clients发送一些列的列表项,被称作为Multi Bulk Reply。它是由N的不同的Bulk Reply 加上一个 *<argc>\r\n 前缀,其中argc是Bulk Reply的个数。

Replies

Redis会向cient回复不同类型replies。根据第一字节可以决定reply回复的不同的种类:

  • Status Reply,第一字节为"+"
  • Error Reply,第一字节为"-"
  • Integer Reply,第一字节为":"
  • Bulk Reply,第一字节为"$"
  • Multi Bulk Reply,第一字节为"*"
  • Status Reply

+ <status strings> \r\n

  • Error Reply

- <error type> < error info> \r\n

  • Integer Reply

: <integer value strings> \r\n

  • Bulk Reply

$<number of bytes of the args>\r\n<args strings>\r\n

  • Multi Bulk Reply

*<number of bulk replies>\r\n<bulk reply list>\r\n

说明

在Multi-Bulk replies中如果单独的元素的长度为-1则表明该元素丢失或者是Null。

Multiple commands and pipelining

一个客户端可以使用同一个连接发送多个命令。利用管道技术可以使用一个单独的写操作将client的多个命令发送出去而不需要在发送完一个命令后等待服务器的回复。这些请求的回复可以在最后进行统一读取。

Inline Commands

Redis还支持早起的协议格式,就是在命令行中的形式如下:

C: PING
S: +PONG
C: EXISTS somekey
S: :0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值