Redis的pipeline批量处理
不瞎比比,先上代码:
$redis = new Redis();
$redis->connect('127.0.0.1','6379');
$oneBeginTime = microtime(true);
for ($i=0; $i < 10000; $i++) {
$redis->set('test1_redis'.$i, $i);
$redis->get('test1_redis'.$i);
}
$oneEndTime = microtime(true)-$oneBeginTime;
echo $oneEndTime.'<br>';
$pipeline = $redis->pipeline();
$twoBeginTime = microtime(true);
for ($i=0; $i < 10000; $i++) {
$pipeline->set('test2_redis'.$i, $i);
$pipeline->get('test2_redis'.$i);
}
$twoEndTime = microtime(true)-$twoBeginTime;
echo $twoEndTime.'<br>';
我们看一下运行结果:
1.7720000743866
0.016000032424927
结果已经很明显了,两种方式的速度相差很多,达到了惊人的110倍!
原理其实也很简单,pipeline其实类似于一个处理队列的暂存,等积累到一定数量的执行之后,一起发送给Redis进行处理,这样,就极大地节省了频繁与Redis通讯的响应时间,从而提升了请求的性能。
主要用于处理批量数据,比如生成缓存数据、初始化队列等需要一次性大批量进行的操作上,即时操作的话就作用不大了。