redis管道(pipeline)

redis为单线程 当执行多个命令时,需要每个命令执行完 前一个命令后才能执行下一个命令,redis底层通信协议提供了管道技术的支持,可以同时发送多条命令,等执行完之后,一次性将结果返回,减小执行时间。
对比:

//不使用管道
$stime=microtime(true); //获取程序开始执行的时间
echo '开始内存:'.memory_get_usage(), '';
echo PHP_EOL; $redis = new \Redis();
$redis->connect('127.0.0.1',6379);
// $redis->auth("root");
 $t1 = time();
 for($i= 0; $i<10000 ; $i++) {
     $redis->set("key::$i",str_pad($i,4,'0',0));
     $redis->get("key::$i");
 }
     $etime=microtime(true);//获取程序执行结束的时间
     $total=($etime-$stime);
     //计算差值
echo "[页面执行时间:{$total} ]s";
//使用管道
$stime=microtime(true); //获取程序开始执行的时间
echo '开始内存:'.memory_get_usage(), '';
echo PHP_EOL; $redis = new \Redis();
$redis->connect('127.0.0.1',6379);
//$redis->auth("root");
//$pipe=$redis->multi($redis::PIPELINE);
//将多个操作当成一个事务执行
$pipe=$redis->pipeline();
//(多条)执行命令简单的,更加快速的发送给服务器,但是没有任何原子 性的保证
for($i= 0; $i<10000 ; $i++) {
    $pipe->set("key::$i",str_pad($i,4,'0',0));
    $pipe->get("key::$i");
}
$replies=$pipe->exec();
//其中每次set/get命令 并没有被redis服务器执行 执行结果会放到最后的exec()中返回
var_dump($replies);;//返回的是一个数组 使用pipeline会失去redis的原子性
$etime=microtime(true);//
//获取程序执行结束的时间
$total=($etime-$stime);
//计算差值
echo "[页面执行时间:{$total} ]s";
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值