Redis源码学习之【命令协议格式】
来源:互联网 发布:乐视视频无法连接网络 编辑:程序博客网 时间:2024/05/21 09:43
介绍
本来这篇要介绍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: PINGS: +PONG
C: EXISTS somekeyS: :0
- Redis源码学习之【命令协议格式】
- Redis源码学习之【命令协议格式】
- redis 统一通讯协议 返回结果格式 请求命令格式
- Redis源码学习之【前言】
- Redis源码学习之【链表】
- Redis源码学习之【前言】
- Redis源码学习之【链表】
- redis源码学习之字典
- Redis 源码学习之 Redis 事务
- redis命令学习之redis键
- redis学习之redis命令01
- Redis 学习之操作命令
- redis源码修改之zincrby,hincrby命令
- TCP/IP协议学习之IP协议首部格式
- Redis源码学习之【动态字符串】
- Redis源码学习之【内存分配】
- Redis源码学习之【哈希字典】
- Redis源码学习之【事件机制】
- 线程之pthread_barrier_create
- Redis源码学习之【epoll封装】
- Redis源码学习之【Tcp Socket封装】
- Redis源码学习之【网络通信框架】
- Spatial Pyramid的BOW和Pyramid HOG的多核
- Redis源码学习之【命令协议格式】
- 使用vfork函数时出现“总线错误”
- Redis安装启动
- 在OC中获取C的数据类型
- shell scripts学习(三)
- Redis常用命令
- OC中的谓词
- <meta property="og:需要写的标签"的应用
- linux环境变量