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);