redis 的客户端和服务器直接是通过tcp协议连接的,不论是客户端向redis服务发送命令还是客户端接收redis的执行结果,都需要网络通信,需要一定的时间,由于网络性能的不同,往返时间也不同,如果我们处理较多的命令,往返时间累加起来 还是对性能有一定的影响的!
由于redis是单线程,所以在执行多个命令时,都需要等待上一条命令执行完才能执行下一条命令,因此,redis底层通信协议提供了对管道技术的支持,通过管道可以一次性发送多条命令,并在执行完毕后将结果一次性返回,当一组命令中的每条命令都不依赖于之前命令的执行结果时,就可以将这组命令通过管道一次性发出,减少客户端与redis的通信成本!
$startTime = microtime(true);
//$on_pipeline = $this->redis->multi(\Redis::PIPELINE); // 开启管道
for ($i=1;$i<10000;$i++) {
$this->redis->set($i,'ocean');
}
// $off_pipeline = $on_pipeline->exec(); // 管道提交
$endTime = microtime(true);
$resTime = $endTime-$startTime;
return $resTime;
未开启管道时 执行时间
开启管道后 执行时间
注意: Redis::PIPELINE管道模式虽然速度更快,但没有任何保证原子性有可能造成数据的丢失
内存消耗会比较大