Redis中PipeLine使用

(一)简介 
Redis客户端与Redis之间使用TCP协议进行连接,一个客户端可以通过一个socket连接发起多个请求命令。每个请求命令发出后client通常会阻塞并等待redis服务处理,redis处理完后请求命令后会将结果通过响应报文返回给client,因此当执行多条命令的时候都需要等待上一条命令执行完毕才能执行,如:get ‘0’,get ‘1’,get ‘2’

这里写图片描述

其执行过程如下图所示:

这里写图片描述

而管道(pipeline)可以一次性发送多条命令并在执行完后一次性将结果返回,pipeline通过减少客户端与redis的通信次数来实现降低往返延时时间,其过程如下图所示 
这里写图片描述

(二)普通方式与pipeline的比较

1.测试环境: 
redis版本2.4.15 
jedis版本2.2.1

2.测试代码 
分别向redis中插入100、500、1000、2000、5000、10000数据

  1. long start=System.currentTimeMillis();  
  2.       for (int i = 0; i <50000; i++) {  
  3.           redis.set(String.valueOf(i),String.valueOf(i));  
  4.       }  
  5.       long end=System.currentTimeMillis();  
  6.       logger.info("the total time is:"+(end-start));  
  7.   
  8.       Pipeline pipe=redis.pipelined();  
  9.       long start_pipe=System.currentTimeMillis();  
  10.       for (int i = 0; i <50000; i++) {  
  11.           pipe.set(String.valueOf(i),String.valueOf(i));  
  12.       }  
  13.       pipe.sync();  
  14.       long end_pipe=System.currentTimeMillis();  
  15.       logger.info("the pipe total time is:"+(end_pipe-start_pipe));  
  long start=System.currentTimeMillis();
        for (int i = 0; i <50000; i++) {
            redis.set(String.valueOf(i),String.valueOf(i));
        }
        long end=System.currentTimeMillis();
        logger.info("the total time is:"+(end-start));

        Pipeline pipe=redis.pipelined();
        long start_pipe=System.currentTimeMillis();
        for (int i = 0; i <50000; i++) {
            pipe.set(String.valueOf(i),String.valueOf(i));
        }
        pipe.sync();
        long end_pipe=System.currentTimeMillis();
        logger.info("the pipe total time is:"+(end_pipe-start_pipe));


测试结果对比: 

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值