今天做了一个极限的测试,把redisClient的回复静态缓冲区buf,设置为3。这样做的目的是使用c->reply作为回复缓冲。测试的时候出现了解析命令出错的问题。
仔细思考了一下原因如下:当c->buf大小为3时,replconf ack 1会被组织成10个链表结点:
而发送时是一个节点一个节点的发送的。如先发*3\r\n,再发$8\r\n,这时被发送方会读取数据,有可能读到*3\r\n,也有可能读到*3\r\n$8\r\n,所以会出现解析命令出错。
今天做了一个极限的测试,把redisClient的回复静态缓冲区buf,设置为3。这样做的目的是使用c->reply作为回复缓冲。测试的时候出现了解析命令出错的问题。
仔细思考了一下原因如下:当c->buf大小为3时,replconf ack 1会被组织成10个链表结点:
而发送时是一个节点一个节点的发送的。如先发*3\r\n,再发$8\r\n,这时被发送方会读取数据,有可能读到*3\r\n,也有可能读到*3\r\n$8\r\n,所以会出现解析命令出错。