您的位置:首页 > 数据库 > Redis

Redis 管道加快Redis 执行速度说明

2012-02-20 16:40 225 查看
我在做 timeline 的demo 实例 的消息推送的时候发现推送的速度怎么如此之慢大概每秒只处理4千条队列代码如下

<?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倍以上...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐