文章目录
mget
、mset
等),有效地节约RTT。但
大部分命令是不支持批量操作的,例如要执行n次hgetall命令,并没有
mhgetall命令存在,需要消耗n次RTT。Redis的客户端和服务端可能部署在不
同的机器上。例如客户端在北京,Redis服务端在上海,两地直线距离约为
1300公里,那么1次RTT时间=1300×2/(300000×2/3)=13毫秒(光在真空中
传输速度为每秒30万公里,这里假设光纤为光速的2/3),那么客户端在1秒
内大约只能执行80次左右的命令,这个和Redis的高并发高吞吐特性背道而驰。Pipeline
(管道)机制能改善上面这类问题,它能将一组Redis命令进行组装,通过一次RTT传输给Redis,再将这组Redis命令的执行结果按顺序返回给客户端Jedis
@Test
public void testPipeline(){
Jedis jedis=new Jedis("localhost", 6379);
Pipeline pipeline=jedis.pipelined(); //获取管道连接对象
Set<String> keys=jedis.keys("*"); //获取所有的key
for (String key : keys) {
pipeline.del(key); //删除key,这里并不是真正的删除,只是将命令排入管道中
}
pipeline.sync(); //执行管道命令
}
Pipeline
对象调用而已pipeline.set()
:添加字符串pipeline.get()
:获取字符串pipeline.sync()
: 执行管道命令,不返回其中命令执行的结果pipeline.syncAndReturnAll()
: 执行其中的命令,并且将每条命令执行的结果存在List
中,我们可以接收并且输出查看