请求响应协议和RTT
Redis是使用TCP的客户端-服务端模式,叫做请求-响应协议。
例如
Client: INCR X
Server: 1
Client: INCR X
Server: 2
Client: INCR X
Server: 3
Client: INCR X
Server: 4
像这样需要请求-响应4个链路周期,每次Client发送一个Redis命令,然后Server响应结果,整个过期花费时间,叫做RTT(Round Trip Time),如果每个RTT需要250ms,则1s能发送 4个请求。
Pipelining
Client可以一次性发送多个命令给服务端,而不是等待Server返回结果再发送下一次命令,Server可以一次返回多个结果,这就是管道(Pipelining)。
使用管道处理上面的情况:
Client: INCR X
Client: INCR X
Client: INCR X
Client: INCR X
Server: 1
Server: 2
Server: 3
Server: 4
Client一次发送4个命令,Server处理完后一次返回4个结果。
当Client使用管道发送命令时,Server会强制使用内存队列保存命令的答复。
Pipelining VS Scripting
Redis除了有管道,还是可以使用脚本完成你的工作。脚本有一个好处,可以同时处理读和写从而减少时间延迟,而管道做不到这一点,在管道的模式下,Client必须等到Server的答复(比如读到结果返回),才能基于答复做下一步操作(比如写等操作)