正如我们在上一节中所展示的,Redis 客户端负责管理与 Redis 服务器的连接。一遍又一遍地创建和重新创建新的连接会在服务器上造成很多不必要的负载。一个好的客户端库将提供一些优化连接管理的方法,例如设置连接池。使用连接池,客户端库将实例化一系列(持久)连接到 Redis 服务器并保持打开状态。当应用程序需要发送请求时,当前线程将从池中获取一个连接,使用它,并在完成后将其返回。
因此,如果可能,请始终尝试选择支持池化连接的客户端库,因为单单这个决定就会对系统的性能产生重大影响。
与任何客户端-服务器应用程序一样,Redis 可以同时处理许多客户端。每个客户端都在套接字上进行(通常是阻塞的)读取,并等待服务器响应。服务器从套接字读取请求,解析它,处理它,并将响应写入套接字。数据包从客户端传输到服务器,然后再传输回来的时间称为网络往返时间,或 **RTT**。例如,如果您需要执行 50 条命令,则必须发送请求并等待响应 50 次,每次都支付 **RTT** 成本。为了解决这个问题,Redis 即使客户端尚未读取旧的响应,也可以处理新的请求。这样,您就可以向服务器发送多个命令,而无需等待任何回复;回复最终以单个步骤读取。
这种技术称为流水线,是提高系统性能的另一种好方法。大多数 Redis 库开箱即用地支持这种技术。