Pipeline(管道)
在Redis中,正常模式是request-》response式的,每一次request都需要等待上一次的response结束,这样涉及到大量数据读写时,每一次交互都需要等待response造成的网络消耗,对应到时间上就是很浪费的。
Pipeline可以用来实现命令的批处理,改变原来的同步交互方式,可以一次发送多个指令,客户端不再同步等待每条指令的返回结果,服务器在执行每个指令后对应的output被阻塞在网络缓冲区中,并在最后一次性返回给客户端。
需要注意的是:
- pipeline期间将独占链接,不能进行其它非pipeline操作;因此如果pipeline中指令集庞大,为了不干扰其它非pipeline操作,可以为pipeline新建client链接,以达到分离的目的;
- 由于output数据被阻塞在缓冲区,因此pipeline中操作个数是有限的,受socket-output缓冲区大小和数据结果大小影响;
- 同理,每个redis-server能接受的pipeline个数也是有限的,受制于server的内存或网络接口缓存能力。
- pipeline中的每个指令都会被执行,但不保证都能成功,执行结果按序保存在返回列表中。
pipeline的实现也很简单:12345Pipeline pipeline = jedis.pipelined();for(******) pipeline.****();pipeline.syncAndReturnAll();