老师你好,我想提几个问题

来源:12-6 实现ReadLine

慕瓜9063200

2022-07-21

在resp协议解析器有个parse0()函数

  1. bufReader := bufio.NewReader(reader)这里bufReader里面读到的就是用户发过来的完整指令*3\r\n$3\r\nset\r\n$3\r\nkey\r\n$5\r\nvalue\r\n对吗?
  2. 那既然是读取了完整的用户指令,为什么不能在for循环解析指令之前包装好用户的指令,再给解析器解析呢,直接让用户发送set ket value不可以吗
  3. for循环中msg, ioErr, err = readLine(bufReader, &state),msg中就是以\r\n切分的数据,例如第一次循环得到的msg就是*3\r\n,第二次就是$3\r\n,是这样的吧
写回答

1回答

Moody

2022-07-21

1 由于网络传输的问题,有可能先收到了半条指令,很长时间之后又收到半条,而且间断的地方也不确定的。这个bufReader就是作为缓冲。

2 RESP协议就是Redis规定好的,我们只能实现他,不能直接让用户发送set ket value,因为现实中的Redis客户端也不会直接发没有编码的指令。

3 对

0
0

深入Go底层原理,重写Redis中间件实战

深入Go语言原理+Go重写Redis

474 学习 · 172 问题

查看课程