码迷,mamicode.com
首页 > 其他好文 > 详细

Redis - pipelining(管道)

时间:2016-04-13 18:25:05      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

客户端向服务器发送一个查询请求,并监听 socket 返回,等待服务器响应。通常是阻塞模式,在收到服务器响应之前是挂起的,不能继续发送请求。

可以使用管道来改善这种情况。在使用管道的情况下,客户端可以请求服务器而不必理会服务器是否有回复。这样就可以一次发出多个命令。

下面是 Jedis 一般情况下和开启管道后发送一系列请求所用时间的对比。

 

public class PipelineTest {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        withoutPipeline(jedis);
        withPipeline(jedis);
        
    }
    
    private static void withoutPipeline(Jedis jedis){
        long start = System.currentTimeMillis();
        jedis.set("name", "gpf");
        for (int i = 0; i < 1000; i++) {
            jedis.append("name", "x");
        }
        long end = System.currentTimeMillis();
        jedis.disconnect();
        System.out.println("time withoutPipeline:"+(end-start));
        System.out.println(jedis.get("name"));
    }
    
    private static void withPipeline(Jedis jedis){
        long start = System.currentTimeMillis();
        jedis.set("name", "gpf");
        Pipeline pl = jedis.pipelined();
        for (int i = 0; i < 1000; i++) {
            pl.append("name", "y");
        }
        pl.sync();
        long end = System.currentTimeMillis();
        System.out.println("time withPipeline:"+(end-start));
        System.out.println(jedis.get("name"));
    }
}

 

多次测试结果均如下面结果所示:

time withoutPipeline:158
gpfxxxxxxxxxxxxxxxxxxxxx...
time withPipeline:22
gpfyyyyyyyyyyyyyyyyyyyyy...

可以看出,开启管道后,效率提升显著。

 

Redis - pipelining(管道)

标签:

原文地址:http://www.cnblogs.com/xmsx/p/5359786.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!