日期:2014-05-16 浏览次数:20389 次
本来这篇要介绍Redis的命令解析的,但是要想对Redis的命令解析有更直观的了解,必须先了解Redis的命令协议格式。
暂无(或者是是在network.c中吧)
*<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的个数。
Redis会向cient回复不同类型replies。根据第一字节可以决定reply回复的不同的种类:
+ <status strings> \r\n
- <error type> < error info> \r\n
: <integer value strings> \r\n
$<number of bytes of the args>\r\n<args strings>\r\n
*<number of bulk replies>\r\n<bulk reply list>\r\n
在Multi-Bulk replies中如果单独的元素的长度为-1则表明该元素丢失或者是Null。
一个客户端可以使用同一个连接发送多个命令。利用管道技术可以使用一个单独的写操作将client的多个命令发送出去而不需要在发送完一个命令后等待服务器的回复。这些请求的回复可以在最后进行统一读取。
Redis还支持早起的协议格式,就是在命令行中的形式如下: