【Redis】用Redis实现微博关注关系

需求分析

问题可以分两种情况来看:

从集合的图来分析

不在这三个小交集中的用户就是无关系状态的用户。

假如我们采用如下一套命名:

粉丝集合 fans:userID
互粉集合(临时) fofa:userID
要查询的集合(临时) find:userID
要查询的集的与我的粉丝交集(临时) find_inter_fans:userID
要查询的集合与我的互粉交集(临时) find_inter_fofa:userID

使用Sorted Set存储关系

函数返回:

以上函数已经求出了所需要的集合,然后就是关系状态判断了。

实现一

假设“我”的ID是1,“别人”的ID是2。

SADD 1:follow 2
SADD 2:fans 1
  1. SREM 1:follow 2
  2. SREM 2:fans 1
SMEMBERS 1:follow

查看别人的把id换掉就可以

四、粉丝列表

查看我的粉丝列表:

SMEMBERS 2:fans

查看别人的把id换掉就可以

五、人物关系

SISMEMBER 1:follow 2 #true
SISMEMBER 1:fans 2 #false
  1. SISMEMBER 1:follow 2 #false
  2. SISMEMBER 1:fans 2 #true

5.3 我和某人是否互粉

  1. SISMEMBER 1:follow 2 #true
  2. SISMEMBER 1:fans 2 #true

互粉的关系是互相的,也可以反过来查。

六、我的互粉

SINTER 1:follow 1:fans
SINTER 1:follow 2:follow

八、数量相关

SCARD 1:follow

8.2 我的粉丝数

SCARD 1:fans

九、问题

ZADD 1:follow 1457871625 2
ZADD 2:fans 1457871625 1
ZREVRANGE 1:follow 0 -1

同时,ZREVRANGE查询时的索引可以作为分页游标,基本解决目前的问题。

粉丝列表同理。

经验分享 程序员 微信小程序 职场和发展