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

2018-11-06  本文已影响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);        

上一篇下一篇

猜你喜欢

热点阅读