redis之readQueryFromClient

void readQueryFromClient(aeEventLoop *el, int fd, void *privdata, int mask)

读数据到redisClient::querybuf;

读到数据超过client_max_querybuf_len时,直接freeClient(c);

processInputBuffer(c);

1、输入以*开头,则reqtype为REDIS_REQ_MULTIBULK,调用processMultibulkBuffer(c);

2、否则,reqtype为REDIS_REQ_INLINE,调用processInlineBuffer(c);

3、调用processCommand(c);


int processInlineBuffer(redisClient *c)

strstr(c->querybuf,"\r\n")找行尾;

argv = sdssplitlen(c->querybuf,querylen," ",1,&argc),按空格分隔每个参数;

更新c->querybuf;

根据argv设置c->argv;


int processMultibulkBuffer(redisClient *c)

解析请求,请求格式如下:

*multibulklen\r\n

$bulklen\r\n

..........\r\n

$bulklen\r\n

..........\r\n

multibulklen指定有多少个bulk,bulklen指定每个bulk的长度;

multibulklen范围[0, 1024*1024];

bulklen范围[0,512*1024*1024];

更新c->querybuf;

根据argv设置c->argv;


int processCommand(redisClient *c)

处理client发送的命令;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值