由于Redis客户端和服务端采用TCP连接,所以每次发送一条指令都需要建立一次连接。但建立连接是比较昂贵的操作,所以Redis底层协议对管道提供了支持,用于在一次连接中发送多条指令,你可以将其与HTTP协议中的长连接进行对比(一次连接发起多个请求)。
测试代码如下:
package org.yamikaze.redis.test;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Pipeline;
import redis.clients.jedis.Response;
import redis.clients.jedis.Transaction;
import redis.clients.jedis.exceptions.JedisDataException;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* 测试Redis的管道
* @author yamikaze
*/
public class TestPipeline {
private Jedis jedis;
private String key = "key";
private String value = "value";
@Before
public void setUp() {
jedis = MyJedisFactory.defaultJedis();
}
/**
* 测试管道
* @throws IOException
*/
@Test
public void testPipeline() throws IOException{
//打开一个管道
Pipeline pipeline = jedis.pipelined();
//使用管道执行一个指令
Response<String> res = pipeline.set(key, value);
//关闭管道
pipeline.close();
if(res != null) {
//Response<T>里面保存的是指令的指令结果
//如果SET指令 T就为String, 如果是HGETALL指令,T就是Map
//如果执行出错就是JedisDataException
System.out.println(res.get());
}
}
@Test
public void testPipeline02() throws Exception{
Pipeline pipeline = jedis.pipelined();
pipelin