Redis 管道加快Redis 执行速度说明
2012-02-20 16:40
225 查看
我在做 timeline 的demo 实例 的消息推送的时候发现推送的速度怎么如此之慢大概每秒只处理4千条队列代码如下
为什么呢? 因为每一次提交信息都是需要对Redis 进行一次TCP 连接 在这个过程里面,非常慢,那么我们要进行对代码的改良,使用管道技术,把多个
队列提交组合成一次提交,从而较少tcp 连接的数量,代码如下
这样的做法,还不至于提高执行的速度,并且在高复杂的环境下,可以较少网络的延迟,在使用了管道技术后,速度明显提升了3倍以上...
<?php /* * 后端推送timeline 的demo 实例 * */ include_once 'Redisdb.class.php'; $Rdb = new Redisdb('192.168.1.252', '6379'); while (1){ $timelineData = $Rdb->MQlPop('user:stream:queue'); if(empty($timelineData)){ sleep(1); }else { $timelineDataArray = explode(':', $timelineData); print_r($timelineDataArray); $FollowersUserList = $Rdb->lRange($timelineDataArray[0].'_followers', 0, -1); foreach ($FollowersUserList as $key=>$val){ $Rdb->MQPush('user:'.$val.':timeline', $timelineDataArray[1]); } } } ?>那么队代码分析下,因为主要慢是慢在
为什么呢? 因为每一次提交信息都是需要对Redis 进行一次TCP 连接 在这个过程里面,非常慢,那么我们要进行对代码的改良,使用管道技术,把多个
队列提交组合成一次提交,从而较少tcp 连接的数量,代码如下
<?php /* * 后端推送timeline 的demo 实例 * */ include_once 'Redisdb.class.php'; $Rdb = new Redisdb('192.168.1.252', '6379'); while (1){ $timelineData = $Rdb->MQlPop('user:stream:queue'); if(empty($timelineData)){ sleep(1); }else { $timelineDataArray = explode(':', $timelineData); print_r($timelineDataArray); $FollowersUserList = $Rdb->lRange($timelineDataArray[0].'_followers', 0, -1); $Rdb->redis->multi(Redis::PIPELINE); // 打开管道 foreach ($FollowersUserList as $key=>$val){ $Rdb->MQPush('user:'.$val.':timeline', $timelineDataArray[1]); } $Rdb->exec();// 多次组合一次性提交 } }
这样的做法,还不至于提高执行的速度,并且在高复杂的环境下,可以较少网络的延迟,在使用了管道技术后,速度明显提升了3倍以上...
相关文章推荐
- PHP中利用Redis管道加快执行
- PHP中利用Redis管道加快执行
- PHP中利用Redis管道加快执行
- Oracle 高水位说明和释放表空间,加快表的查询速度
- Oracle 高水位说明和释放表空间,加快表的查询速度
- redis来共享各个服务器的session,并同时通过redis来缓存一些常用的资源,加快用户获得请求资源的速度(转)
- 加快UE4 Setup.bat执行速度
- 关于加快INSERT语句执行速度和 HINT /*+ append*/及nologging的使用
- 动态联接库(DLL)是加快应用程序关键部分的执行速度
- JAVA执行INSERT或UPDATE语句比较慢,如何加快执行速度
- 练习2-9 在求对二的补码时,表达式 x &= (x - 1) 可以删除 x 中最右边值为 1 的一个二进制位,请解释这样做的道理。用这一方法重写biecount函数,以加快其执行速度。
- Redis使用管道一次I\O执行多条命令(转)
- 如何加快sql执行速度?
- SVM训练结果参数说明 训练参数说明 归一化加快速度和提升准确率 归一化还原 核函数
- 练习 2-9 在求对二的补码时,表达式x &= (x – 1)可以删除x中最右边值为1的一个二进制位。请解释这样做的道理。用这一方法重写bitcount函数,以加快其执行速度。
- 向PHP要效率——加快你的代码执行速度(strpos 快于 preg_match 快于 strstr 快于 ereg)
- 关于加快INSERT语句执行速度和HINT /*+ append */及/*+ append nologging */的使用
- 如何加快sql执行速度?
- 加快程序装载和执行速度
- 关于加快insert语句执行速度的测试