• Redis pipelining(管道)


    客户端向服务器发送一个查询请求,并监听 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...

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

    开启管道后可以在短时间内插入大量记录。

  • 相关阅读:
    Mesos 配置项解析
    1039. Course List for Student (25)
    Cts框架解析(12)-ITargetPreparer
    通过ulimit改善linux系统性能(摘自IBM)
    HDU 1080 DP
    C语言调用Lua函数
    创建MySQL从库
    C# Func&lt;&gt;托付
    SpringMVC入门
    VNC连接Ubuntu 16.04桌面灰色的问题解决
  • 原文地址:https://www.cnblogs.com/felix-1/p/5359786.html
Copyright © 2020-2023  润新知