几天前做的redis c->buf=3极限测试,开始以为redis的解决方法就是把REDIS_REPLY_CHUNK_BYTES的数值放大。可是经过几天思考觉得不对,就算块放的再大也会出现命令不完整的情况,这种情况在redis中叫作short read。
查看源码后发现redis对这个问题的解决方法是:如果发现命令不完整就跳出读取命令的函数,同时不删除querybuf中的数据。直到命令完整时,才会删除querybuf中的数据。
但是他在判断的时候也注意到了错误命令的情况,如果出错误的命令,则异步关闭客户端。