Redis实战之微博关注功能

1、需求分析:
每个用户都有两个表:用户的关注、用户的粉丝
关注关系有四种:关注、粉丝、互粉、无关系

关注功能可划分为:
1)查看自己的关注/粉丝列表:
关注列表与自己只存在两种关系:关注、互粉
粉丝列表与自己只存在两种关系:粉丝、互粉

2)查看别人的关注/粉丝列表:
关注列表与自己存在四种关系:关注、粉丝、互粉、无关系

2、实现:

结构类型采用:zset,score:存储关注时间

key命名规则:
关注:follow:$userID 
粉丝:fans:$userID

要查询的集合(临时):$findSet
要查询的集合与我的关注交集(临时):inter_follow:$userID 
要查询的集的与我的粉丝交集(临时):inter_fans:$userID
互粉集合(临时):fofa:$userID 


输入:
$userID:当前用户ID
$targetUserID:被查看用户的ID
$findType: 查看的是哪个列表,follow:关注表,fans:粉丝表
$findStart: 分页查看的列表开始位置 
$findEnd: 分页查看的列表结束位置


算法:
要查询的集合(临时):$findSet = zRevRange $findType:$targetUserID $findStart $findEnd

1、获取关注、粉丝、互粉集合
if ($userID != $targetUserID) 
{ 
    //1、看别人
    //1.1、互粉
    $fofaSet = zInterStore fofa:$userID 3 $findSet follow:$userID  fans:$userID

    /*若查看的不是自己的列表,则还需 
    * 1: 要查询的集合与我的关注交集 
    * 2: 要查询的集的与我的粉丝交集 
    */

    $interFollow = zInterStore inter_follow:$userID 2 $findSet follow:$userID
    $interFans = zInterStore inter_fans:$userID 2 $findSet fans:$userID 
} 
else 
{
    //2、查看自己的列表 只需查看互粉
    if ($findType == "fans") 
    { 
        //2.1、自己看粉丝列表
        $fofaSet = zInterStore fofa:$userID 2 $findSet follow:$userID
    } 
    else if ($findType == "follow") 
    {
        //2.2、看自己关注列表 
        $fofaSet = zInterStore fofa:$userID 2 $findSet fans:$userID 
    } 
} 


//2、关系判断
$sum = zcard $findSet
for($index = 0; $index < $sum; $index++)
{
    $tempUserID = zRange $findSet $index $index+1
    if($tempUserID in $fofaSet)
    {
        //互粉
    }
    else if($userID == $targetUserID)
    {
        //关系由$findType决定
    }
    else
    {
        if($tempUserID in $interFans)
        {
            //我的粉丝
        }
        else if($tempUserID in $interFollow)
        {
            //我的关注
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值