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