因为在操作Redis的时候,执行一个命令需要先发送请求到Redis服务器,这个过程需要经历网络的延迟,
Redis还需要给客户端一个响应。
如果我需要一次性执行很多个命令,上述的方式效率很低,可以通过Redis的管道,
先将命令放到客户端的一个Pipeline中,之后一次性的将全部命令都发送到Redis服务, Redis服务一次性的将全部的返回结果响应给客户端。
!!!!这一种效率低耗时间长!!!
public class TestRedisDemo6 {
// Redis管道的操作
@Test
public void testNopipeline(){
//1. 创建连接池
JedisPool jedisPool = new JedisPool("127.0.0.1", 6379);
long l = System.currentTimeMillis();
//2. 获取一个连接对象
Jedis jedis=jedisPool.getResource();
//3. 执行incr - 100000次
for(int i=0;i<100000;i++){
jedis.incr("pp");
}
//4. 释放资源
jedis.close();
System.out.println(System.currentTimeMillis()-l)
}
这一种用了管道效率远远高于第一种方法
// Redis管道的操作
@Test
public void testNopipeline(){
//1. 创建连接池
JedisPool jedisPool = new JedisPool("127.0.0.1", 6379);
long l = System.currentTimeMillis();
//2. 获取一个连接对象
Jedis jedis=jedisPool.getResource();
//3. 执行incr - 100000次
for(int i=0;i<100000;i++){
jedis.incr("pp");
}
//4. 释放资源
jedis.close();
System.out.println(System.currentTimeMillis()-l);
}
@Test
public void testpipeline() {
//1. 创建连接池
JedisPool jedisPool = new JedisPool("127.0.0.1", 6379);
long l = System.currentTimeMillis();
//2. 获取一个连接对象
Jedis jedis=jedisPool.getResource();
//3. 创建管道
Pipeline pipelined = jedis.pipelined();
//3. 执行incr - 100000次放到管道中
for (int i=0;i<100000;i++){
pipelined.incr("qq");
}
//4. 执行命令
pipelined.syncAndReturnAll();
//5. 释放资源
jedis.close();
System.out.println(System.currentTimeMillis()-l);
}
}