一、前言
在使用大批量jedis客户端向redis服务器发起连接命令操作时,通常使用redis.clients.jedis.Pipeline方式,将所有的操作先计入管道中,然后再批量提交到redis服务器响应,可以很大程度提供redis的压力,从而提供整体性能。
二、代码示例
PipelineTest类 - 通过每次直接向redis服务器发送执行命令操作,和使用Pipeline管道批量提交的方式来进行对比性能延时,代码如下
import redis.clients.jedis.Jedis;@b@import redis.clients.jedis.Pipeline;@b@@b@public class PipelineTest {@b@ @b@ /**@b@ * 没有使用管道的情况,发起redis进行指定key序列累加操作@b@ * @param count@b@ */@b@ private static void unusedPipeline(int count){@b@ Jedis jr = null;@b@ try {@b@ jr = new Jedis("127.0.0.1", 6379);@b@ for(int i =0; i<count; i++){@b@ jr.incr("testKey1");@b@ }@b@ } catch (Exception e) {@b@ e.printStackTrace();@b@ }finally{@b@ if(jr!=null){@b@ jr.disconnect();@b@ }@b@ }@b@ }@b@ @b@ /**@b@ * 使用管道的情况,发起redis进行指定key序列累加操作@b@ * @param count@b@ */@b@ private static void usedPipeline(int count){@b@ Jedis jr = null;@b@ try {@b@ jr = new Jedis("127.0.0.1", 6379);@b@ Pipeline pl = jr.pipelined();@b@ for(int i =0; i<count; i++){@b@ pl.incr("testKey2");@b@ }@b@ pl.sync();@b@ } catch (Exception e) {@b@ e.printStackTrace();@b@ }finally{@b@ if(jr!=null){@b@ jr.disconnect();@b@ }@b@ @b@ }@b@ @b@ }@b@ @b@ public static void main(String[] args) {@b@ int count = 100000;@b@ long start = System.currentTimeMillis();@b@ unusedPipeline(count);@b@ long end = System.currentTimeMillis();@b@ System.out.println("无Pipeline情况: " + (end-start));@b@@b@ start = System.currentTimeMillis();@b@ usedPipeline(count);@b@ end = System.currentTimeMillis();@b@ System.out.println("有Pipeline情况: " + (end-start));@b@@b@ }@b@ @b@@b@}
控制台答应结果如下
无Pipeline情况: 26553@b@有Pipeline情况: 296