http://www.sziwap.com/archives/202.html
最近和一兄弟在讨论多次redis的操作可不可以一次性完成,这样可以节省redis的连接和发送命令的次数,这样就开始了通道(管道)操作的研究。
像有时候一次需要多次从redis中取数据或者插入数据,通常我们的做法会如下:
- for ($i = 0; $i < 10; $i++) {
- $redis->set("key::$i", str_pad($i, 4, '0', 0));
- $redis->get("key::$i");
- }
但是如此操作会带来的问题便是会多次给redis发送请求,给效率上也会带来一定的影响,因此,想通过一次性的操作,完成这些。
我们来看看以下的代码:
- $pipe = $redis->multi(Redis::PIPELINE);
- for ($i = 0; $i < 10; $i++) {
- $pipe->set("key::$i", str_pad($i, 4, '0', 0));
- $pipe->get("key::$i");
- }
- $replies = $pipe->exec();
- print_r($replies);
我们来看看运行结果:
- Array ( [0] => 1 [1] => 0000 [2] => 1 [3] => 0001 [4] => 1 [5] => 0002 [6] => 1 [7] => 0003 [8] => 1 [9] => 0004 [10] => 1 [11] => 0005 [12] => 1 [13] => 0006 [14] => 1 [15] => 0007 [16] => 1 [17] => 0008 [18] => 1 [19] => 0009 )
从上面看出来,通过这样的操作,是可以一次性完成的。
呵呵。上面的东西还是多谢Aloxc 兄弟的提醒。