Jedis源码解析(Pipeline的实现)
1 Pipeline介绍Redis客户端与Redis之间使用TCP协议进行连接,一个客户端可以通过一个socket连接发起多个请求命令。每个请求命令发出后client通常会阻塞并等待redis服务处理,redis处理完后请求命令后会将结果通过响应报文返回给client,因此当执行多条命令的时候都需要等待上一条命令执行完毕才能执行,如:get ‘0’,get ‘1’,get ‘2’ 其执行过程如下图所示: 而管道(pipeline)可以一次性发送多条命令并在执行完后一次性将结果返回,pipeline通过减少客户端与redis的通信次数来实现降低往返延时时间,其过程如下图所示 : 2 Pipeline类的结构3 Jedis的Pipeline的实现先上使用代码,批量插入string: (1)获取Pipeline对象 在上篇中,我们知道BinaryJedis有一个成员变量pipeline,通过其pipeline()方法可以获取Pipeline对象 (2)Pipeline对象set方法干了啥 pipeline的set方法实际调用的是Pipelinebase类(Pipeline父类的父类)的set方法: (3)Pipeline对象sync方法干了啥 在上面Pipelinebase的set方法的最后了,调了一个getResponse()方法。该方法相当于把每一次的请求操作加入到一个Queue里面,这个队列有啥用?先放在这里! 来看一下万恶的sync()方法,对注意红色的部分: 3)generateResponse(o)就是拿到返回值了,sync是没有返回值的,syncAndReturnAll有返回值 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |