PHP+redis实现微博的拉模型案例详解(2)
展示微博
首先获取所有关注的人,获取上次拉取微博的位置,根据上次拉取的微博位置来拉取数据。然后给微博排序,设置新的拉取的位置,写入到已拉取表中,获取微博的详细内容,最后获取粉丝和关注数。进行展示即可。
//1、获取拉取对象 $stars = $conn->smembers('following:'.$user['userid']);//获取所有关注的人 $stars[] = $user['userid'];//需要拉取自己的微博 //2、获取上次拉取的位置 $lastpull = $conn->get('lastpull:userid:'.$user['userid']); if(!$lastpull){ $lastpull = 0; } //3、拉取微博 $latest = []; foreach($stars as $star){ $latest = array_merge($latest,$conn->zrangebyscore('starpost:userid:'.$star,$lastpull+1,1<<32-1)); } //4、给微博排序 sort($latest,SORT_NUMERIC); //5、设置拉取的位置 if(!empty($latest)){ $conn->set('lastpull:userid:'.$user['userid'],end($latest)); } //6、写入到已拉取表中 foreach($latest as $l){ $conn->lpush('receivepost:'.$user['userid'],$l); } $conn->ltrim('receivepost:'.$user['userid'],0,999);//至多显示1000条微博 //7、获取微博的详细内容 $postids = $conn->sort('receivepost:'.$user['userid'],['sort'=>'desc']); $posts = []; foreach($postids as $postid){ $posts[] = $conn->hmget('post:postid:'.$postid,['userid','username','time','content']); } //8、获取粉丝和关注数 $fansnum = $conn->scard('follower:'.$user['userid']); $follownum = $conn->scard('following:'.$user['userid']);
Q&A
如何保证拉取的数据时最新的?
在拉取的时候,将最近拉取的微博id保存到redis中,然后下次我们只需要去拉取比这次保存的微博id大的微博,就可以保证拉取的数据是之前没有拉取的。
如何拉取所有关注者的数据?
遍历关注者,然后拉取数据
假设拉取A关注者的微博1,4,5 B关注者2,3,但是他们的发布时间交错,怎么展示数据?
将所有关注者的最新微博都取出来,然后根据微博id进行排序。
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php+redis数据库程序设计技巧总结》、《php面向对象程序设计入门教程》、《PHP基本语法入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。