PHP Redis的通道操作

来源:互联网 发布:java 权限框架 编辑:程序博客网 时间:2024/05/15 23:51

最近和一兄弟在讨论多次redis的操作可不可以一次性完成,这样可以节省redis的连接和发送命令的次数,这样就开始了通道(管道)操作的研究。

像有时候一次需要多次从redis中取数据或者插入数据,通常我们的做法会如下:

view plaincopy to clipboardprint?
  1. for ($i = 0; $i < 10; $i++) {  
  2.         $redis->set("key::$i"str_pad($i, 4, '0', 0));  
  3.         $redis->get("key::$i");  
  4. }  

但是如此操作会带来的问题便是会多次给redis发送请求,给效率上也会带来一定的影响,因此,想通过一次性的操作,完成这些。
我们来看看以下的代码:

view plaincopy to clipboardprint?
  1. $pipe = $redis->multi(Redis::PIPELINE);  
  2. for ($i = 0; $i < 10; $i++) {  
  3.         $pipe->set("key::$i"str_pad($i, 4, '0', 0));  
  4.         $pipe->get("key::$i");  
  5. }  
  6. $replies = $pipe->exec();  
  7. print_r($replies);  

我们来看看运行结果:

  1. 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 )  

从上面看出来,通过这样的操作,是可以一次性完成的。