redis中一个操作命令就是客户端和服务端的一次交互,如果有1000条set命令则意味着客户端和服务端会有1000次交互,这显然在性能上不符合我们的期望。
redis提供管道机制来解决这一问题,使用管道会将1000条命令一次性发给服务器然后再一次性全部执行,管道就是执行了一个批处理操作。
下面两个例子分别使用管道和非管道两种方式创建1000个key
使用管道
@Test
public void testPipeline()
{
//1:从jedis连接池中获取链接
Jedis jedis = RedisTools.getJedis();
//2:通过jedis得到管道
Pipeline pipeline = jedis.pipelined();
//3:通过管道执行1000条命令
long start = System.currentTimeMillis();
for(int i = 0; i < 1000; i++)
{
pipeline.set("set" + i, i + "");
}
pipeline.sync();
long end = System.currentTimeMillis();
System.out.println("pipeLine : " + (end - start));
}
不使用管道
@Test
public void testNoPipeline()
{
//1:从jedis连接池中获取链接
Jedis jedis = RedisTools.getJedis();
//2:不通过管道执行1000条命令
long start = System.currentTimeMillis();
for(int i = 0; i < 1000; i++)
{
jedis.set("jedis" + i, i + "");
}
long end = System.currentTimeMillis();
System.out.println("Not pipeLine : " + (end - start));
}
从实验结果来看操作1000条数据,使用管道耗时91,不使用管道耗时283