Amazing Redis

redis 学习(11)-- redis pipeline

2019-06-01  本文已影响23人  希希里之海

redis pipeline

什么是流水线(pipeline)

首先来看 redis 执行一次操作所需要的时间:

1 次时间 = 1 次网络时间 + 1次命令时间

执行 n 次就需要:

n 次时间 = n 次网络时间 + n 次命令时间

所以可以看到,如果执行 n 次的话(比如 n 次 set 操作),时间开销是非常大的。

由于命令时间非常短,影响时间开销的主要是网络时间,所以我们可以把一组命令打包,然后一次发送过去。这样的话,时间开销就变为:

1 次 pipeline(n条命令) = 1 次网络时间 + n 次命令时间

pipeline 的好处

命令 N个命令操作 1次pipeline(n个命令)
时间 n次网络+n次命令 1次网络+n次命令
数据量 1条命令 n条命令

pipeline VS M 操作(mget、mset)

之前我们讲过 M 操作,也是类似 pipeline,将多个命令一次执行,一次发送出去,节省网络时间。对比如下:

pipeline注意事项

pipeline-Jedis使用

Maven 依赖

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
    <type>jar</type>
    <scope>compile</scope>
</dependency>    

代码如下

//没有使用pipieline的情况下
public void testWithoutPipeline() {
    Jedis jedis = new Jedis("127.0.0.1" , 6379);
    for(int i = 1 ; i <= 10000 ; i++ ) {
        jedis.hset("hashKey-" + i , "field-" + i , "value-" + i);
    }
}

//使用pipeline的情况下
public void testPipeline() {
    Jedis jedis = new Jedis("127.0.0.1" , 6379);
    for(int i = 0 ; i < 100 ; i++ ) {
        Pipeline pipeline = jedis.pipelined();
        for(int j = i * 100 ; i < (i+1) * 100 ; j++ ) {
            pipeline.hset("hashKey-" + j , "field-" + j , "value-" + j);
        }
        pipeline.syncAndReturnAll();
    }
}
上一篇下一篇

猜你喜欢

热点阅读