美文网首页
redis14微博项目之微博发布,粉丝关注,推送微博

redis14微博项目之微博发布,粉丝关注,推送微博

作者: 机智的老刘明同志 | 来源:发表于2018-11-06 01:54 被阅读42次

    key值设计:

            键名                                                                 操作                     备注

            Global:postid                                                    incr                     产生全局的postid(相当于关系型数据库中的主键)

            post:postid:$postid:time                                   get,set                找到$postid的发帖时间

            post:postid:$postid:userid                                get,set                找到$postid的发帖人

            post:postid:$postid:content                              get,set                找到$postid的内容

    微博发布:

            微博发布的原理同老夫上篇所提到的用户注册一样

            当用户发布了一篇微博之后

            $postid = $redis->incr('global:userid');

            $redis->set('post:postid:$postid:time',date('Y-m-d H:i:s')) ;

            $redis->set('post:postid:$postid:userid',当前用户id) ;

            $redis->set('post:postid:$postid:content',‘国服第一剑魂重新归位’) ;

            这里我们也可以用哈希的形式来存储微博信息

             $redis->hmset('post:postid:$postid',$array('userid'=>$uid,'time'=>date('Y-m-d H:i:s'),'content'=>'国服第一剑魂重新归位')) ;

    最近注册的50位用户:

            每当有新用户注册的时候,我们将新用户推入到链表中

            $redis->lpush('newuserlink',$userid);

            链表我们只取前50位用户

            $redis->ltrim('newuserlink',0,49);

            这里sort函数类似于mysql中的关联查询(倒序,并且关联key值的 user:userid:*:username 来获取用户名字)

            $newuserlist = $r->sort('newuserlink',array('sore'=>'desc','get'=>'user:userid:*:username'))

    关注/取消关注:

            关注和取消关注就更加简单了,定义 你关注的人 和 你的粉丝  两个集合

            这里我们判断下对方的userid 在不在 你关注的人集合范围内

            $res = $redis->ismember('following'.$userid,对方的userid);

            if($res){

                $redis->sadd('following'.$uid,对方的userid);        //将对方的uid 加入你关注的人的集合

                $redis->sadd('follow'.对方的userid,$uid);            //将你的uid 加入到对方的粉丝集合中

            }else{

                $redis->srem('following'.$uid,对方的userid);       //取消关注自然是删除了

                $redis->srem('follow'.对方的userid,$uid);

            }

    推送微博:

            推送微博自然是给所有粉丝推送了

            $fans = $redis->smembers('follow'.$uid);    //获取集合的所有成员

            $fans[] = $uid;        //顺便也给自己推送一份

            foreach($fans as $fansid){

                    $redis->lpush('receivepost'.$fansid,$postid);  //定义一个receivepost.$uid 的链表 用于存储帖子id

            }

            之后有了receivepost.$uid 队列后我们可以截取最新50条,并且可以通过sort函数关联查找出发帖人,发帖时间

    粉丝个数:

            $myfans = $redis->sCard('follow'.$uid);        

    相关文章

      网友评论

          本文标题:redis14微博项目之微博发布,粉丝关注,推送微博

          本文链接:https://www.haomeiwen.com/subject/wuqyxqtx.html