Redis 管道技术
Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。
管道技术的优势
管道技术最显著的优势是提高了 redis 服务的性能。redis本身性能是很高的,单个redis命令的执行时间很短,大量的redis操作,网络IO的耗时非常大,而redis管道技术大大的减少了程序和redis的交互 次数,性能提升非常明显。
管道的使用----Jedis
public class PipelineTest {
public static void main(String[] args){
Jedis jedis = new Jedis("localhost",6060);
Pipeline pipeline = jedis.pipelined();
pipeline.set("xiajw","test");
pipeline.set("hello","world");
List<Object> result = pipeline.syncAndReturnAll();
jedis.close();
}
}
JedisCluster改造
在使用Jedis的时候,pipeline的使用非常简单。但是实际上,大家大部分情况会使用集群JedisCluster来进行操作,当我去JedisCluster类里面查找的时候发现,没有pipeline方法。JedisCluster本身是不支持管道操作的。
为什么不支持,以下仅代表个人观点。JedisCluster底层其实就是对Jedis的调用。redis集群中的每个主节点管理着各自的slot区间,而数据的存储,会计算key所在的slot,然后调用slot所在的redis实例去操作。JedisCluster本身如果支持管道的话,由于要分步调用不同的redis管道,redis本身对于事务的支持也基本没有,本身很难保证所有操作的一致性,因为是分批发送的,如果方法里提供,可能会让大家产生误解,以为它就是一致的,所以干脆不提供。