Redis实现好友关注关系的思路

在项目中,我们有时可能会需要设计好友关注这个功能。如果用关系性数据库,例如MySQL可能会查询很慢,我们可以用Redis来实现这个功能。

如上图所示,在好友关注关系中,主要有以上三种状态,即:

  • 我的粉丝(fans)
  • 我的关注(follow)
  • 互粉(mutual)

假设两个用户。用户ID分别为1和2,。

关注

1、关注好友:

关注好友分为两个步骤。

第一步,将对方写入我的关注中。第二步,将我写入对方的粉丝中。即:

[php]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. ZADD 1:follow time(时间戳) 2  
  2. ZADD 2:fans time(时间戳) 1  

2、取消关注:

取消关注也分为两个步骤

第一步,将对方从我的关注中移除。第二步,将我从对方的粉丝中移除。即:

[php]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. ZREM 1:follow 2  
  2. ZREM 2:fans 1  

3、查看粉丝列表

[php]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. ZRANGE 1:fans 0 -1  

4、查看关注列表

[php]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. ZRANGE 1:follow 0 -1  

5、粉丝数量

[php]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. ZCARD 1:fans  

6、关注数量

[php]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. ZCARD 1:follow  


人物关系

1、我单向关注Ta。即我关注的Ta,但是Ta并没有关注我的

[php]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. ZSCORE 1:follow 2 #ture  
  2. ZSCORE 1:fans 2 #false  
如果第一条成立,第二条不成立,说明我单向关注了对方(1关注了2,而1的粉丝中没有2,说明2并没有关注1)。

2、Ta单向关注我。即Ta关注我了,我并没有关注Ta

[php]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. ZSCORE 1:follow 2 #false  
  2. ZSCORE 1:fans 2 #true  
如果第一条不成立,第二条成立,说明对方单向关注了我(1没有关注2,而1的粉丝中有2,说明2关注了1);

3、互相关注。即我关注了Ta,Ta也关注了我

[php]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. ZSCORE 1:follow 2 #true  
  2. ZSCORE 1:fans 2 #true  
如果上面两条都成立,即说明互相关注了(1关注了2,并且1的粉丝中有2,说明2也关注1了)。

我的互粉列表以及共同关注列表:

在查询出数据的时候可以将关系写入到临时表中,在这里就不再阐述了。


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值