【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
- SREM 1:follow 2
- SREM 2:fans 1
SMEMBERS 1:follow
查看别人的把id换掉就可以
四、粉丝列表
查看我的粉丝列表:
SMEMBERS 2:fans
查看别人的把id换掉就可以
五、人物关系
SISMEMBER 1:follow 2 #true SISMEMBER 1:fans 2 #false
- SISMEMBER 1:follow 2 #false
- SISMEMBER 1:fans 2 #true
5.3 我和某人是否互粉
- SISMEMBER 1:follow 2 #true
- 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查询时的索引可以作为分页游标,基本解决目前的问题。
粉丝列表同理。
下一篇:
事物的特性、传播特性及隔离级别