pipeline机制对于Redis性能的提升究竟有多大?

前言:一般来说,Redis命令真正执行的时间通常在微秒级别,一次数据读取或写入耗费时间通常与客户端和Redis服务器之间延迟情况有直接关系。所以也有Redis性能瓶颈是在网络层面的说法。在此背景下,Redis提供了pipeline(流水线)机制,其作用为将多个Redis命令打包封装,一次性发送给Redis服务端,在Redis执行完成后,将执行结果统一返回,以达到减少RTT次数,提高Redis整体吞吐量的目的。本篇主要测试pipeline(流水线)机制对于Redis的性能提升究竟有多大。

 

测试准备

服务器:

1.本地docker中的Redis节点

2.办公内网测试环境的Redis节点(使用办公环境内网服务器)

3.外网服务器部署Redis节点(使用Bandwagon的VPS,官网显示物理机位置为美国加利福尼亚州)

客户端:

使用Java语言,引入Jedis工具包完成对Redis的连接。

测试方法:

1.客户端通过直接set和使用pipeline(流水线)机制两种不同的方式分别for循环1000次向Redis中添加1000个带有有效时间的key,横向对比两种方式的耗时差距。

2.统计本地ping三台服务器的延迟时间,并对三台服务器使用方法1分别进行测试,纵向对比不同服务器之间的耗时差异。

 

测试开始

客户端测试代码如下,同时,为了避免网络抖动等环境问题导致测试结果不准确,预计一共进行五轮测试。

  public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        long startTime = System.currentTimeMillis();
        // setex
//        setex(jedis);
        //pipeline
        pipeline(jedis);
        long result = System.currentTimeMillis() - startTime;
        System.out.println("本次耗时为:" + result);
    }

    /**
     * pipeline
     *
     * @param jedis
     */
    private static void pipeline(Jedis jedis) {
        Pipeline pipelined = jedis.pipelined();
        for (int i = 0; i < 1000; i++) {
            pipelined.setex(String.valueOf(i), 20, String.valueOf(i));
        }
        pipelined.sync();
    }

    /**
     * 直接set
     *
     * @param jedis
     */
    private static void setex(Jedis jedis) {
        for (int i = 0; i < 1000; i++) {
            jedis.setex(String.valueOf(i), 20, String.valueOf(i));
        }
    }

 

测试结果

docker本地:

轮次ping延迟setex耗时pipeline耗时
第一次0.12ms1208ms28ms
第二次0.14ms1107ms36ms
第三次0.12ms987ms28ms
第四次0.07ms1113ms29ms
第五次0.09ms912ms27ms

 

办公网测试环境:

轮次ping延迟setex耗时pipeline耗时
第一次20.93ms5893ms102ms
第二次11.62ms7129ms57ms
第三次13.05ms6421ms77ms
第四次8.71ms5987ms53ms
第五次9.44ms6997ms58ms

云服务器:

轮次ping延迟setex耗时pipeline耗时
第一次192.40ms336557ms1987ms
第二次182.60ms352612ms1017ms
第三次172.45ms331517ms1507ms
第四次173.05ms370071ms1125ms
第五次172.49ms301157ms987ms

 

五次测试取均值:

服务器ping延迟setex耗时pipeline耗时性能提升
本地docker0.108ms1065.4ms29.6ms36倍
办公网测试服务器12.75ms6485.4ms69.4ms93.5倍
云服务器178.598ms338382.8ms1324.6ms255.5倍

 

结论

根据本次测试结果得知,在批量操作Redis的多个key时,相比于操作单个key的命令,pipeline(流水线)机制的性能提升明显,并且客户端与服务器的延迟越高,pipeline(流水线)机制的性能提升越明显。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值