请求处理时间太长
一 问题
如果我一共获取到25个人的信息,那么我就要去写一个循环每次去redis中get值,那么这样就要25次访问redis,如果一共获取到10000个人的信息,那么一共就要100次访问redis,非常耗费时间。
二 原因
当get一批key的value,因为redis的get操作(不单单是get命令)是阻塞的,如果循环取值的话,就算是内网,耗时也是巨大的
三 解决方法
使用BinaryJedis中的mget方法
public List<byte[]> mget(byte[]... keys) {
this.checkIsInMultiOrPipeline();
this.client.mget(keys);
return this.client.getBinaryMultiBulkReply();
}
四 原理
这样就是相当于使用管道【这个mget方法中使用到了Pipeline(jedis中的管道)】,允许client将多个请求依次发给服务器(redis的客户端,如jedisCluster,lettuce等都实现了对pipeline的封装),过程中而不需要等待请求的回复,在最后再一并读取结果即可。这样最后把结果存入到内存中,就会==快了十几倍【从900ms降到50ms】==吧!