学习目标:
1、了解管道 (Pipeline)
2、掌握管道 (Pipeline)在客户端中的应用
学习过程:
管道 (Pipeline)有点类似sql中的批处理,客户端每一个request请求命令发出后,这时候客户端会阻塞,等待redis服务端的返回响应报文给客户端。如果一次需要执行的命令很多,那么效率就会很低了,由客户端把所有的命令打包,一并发送给redis服务端,这样就只是一次网络请求就可以了。
我们可以对比一下,添加10000条数据,看一下不用Pipeline和使用Pipeline的效率差别
@Test
public void testPip() {
Jedis jedis = new Jedis("192.168.137.101", 6379);
jedis.auth("123456");
Date begin=new Date();
for(int i=0;i<100000;i++) {
jedis.set("abc"+i, "abc"+i);
}
Date end=new Date();
//56593
System.out.println(end.getTime()-begin.getTime());
}
@Test
public void testPip2() {
Jedis jedis = new Jedis("192.168.137.101", 6379);
jedis.auth("123456");
Pipeline pipeline=jedis.pipelined();
Date begin=new Date();
for(int i=0;i<100000;i++) {
pipeline.set("aaa"+i, "aaa"+i);
}
Date end=new Date();
//2045
System.out.println(end.getTime()-begin.getTime());
}
第一个没有共使用了56593,第二个只需要2045,差别还真的不是一般的大。