Redis是一种基于客户端-服务端(C/S)模型以及请求/响应协议(Request/Response protocol)的TCP服务。
通常情况下一个请求会遵循以下步骤:
- 客户端向服务端发送一个请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。
- 服务端处理命令,并将结果返回给客户端。
数据包从客户端到达服务器,并从服务器返回数据回复客户端,这个时间称为RTT(Round Trip Time - 往返时间)。
当向redis插入大量数据时,不仅消耗很多的RTT时间,而且还消耗了大量IO调用(IO调用涉及到用户态到内核态之间的切换)。
Redis pipeline
pipeline原理是:一次请求/响应服务器能实现处理新的请求,即使旧的请求还未被响应。这样就可以将多个命令发送到服务器,而不用等待回复,最后在一个步骤中读取该答复。这样就可以减少RTT时间和频繁的IO调用。
redis pipeline工作机制
- 客户端:将多个命令缓存起来,缓冲区满了或者达到发送条件就发送出去,最后才处理Redis的应答。
- 服务端:能够处理一个客户端通过同一个TCP连接发来的多个命令。
注意事项:
当客户端使用pipeline发送很多请求时,服务器将在内存中使用队列存储这些指令的响应。所以批量发送的指令数量,最好在一个合理的范围内,比如每次发1万条指令,读取完响应后再发送另外1万条指令。2万条指令,一次性发送和分2次发送,对客户端来说速度是差不多的,但是对服务器来说,内存占用差了1万条响应的大小。










网友评论