目标:实现关注/取关、关注列表,共同好友
设计思路
总体思路我们采用MySQL + Redis的方式结合完成。MySQL主要是保存落地数据,而利用Redis的Sets进行集合操作。Sets拥有去重(我们不能多次关注同一用户)功能**。一个用户我们存贮两个集合:一个是保存用户关注的人 另一个是保存关注用户的人.
- SADD 添加成员;命令格式: SADD key member [member …] ----- 关注
- SREM 移除某个成员;命令格式: SREM key member [member …] -------取关
- SCARD 统计集合内的成员数;命令格式: SCARD key -------关注/粉丝个数
- SISMEMBER 判断是否是集合成员;命令格式:SISMEMBER key member ---------判断是否关注(如果关注那么只可以点击取关)
- SMEMBERS 查询集合内的成员;命令格式: SMEMBERS key -------列表使用(关注列表和粉丝列表)
- SINTER 查询集合的交集;命令格式: SINTER key [key …] --------共同关注、我关注的人关注了他
Mysql示例表
-- 表
CREATE TABLE t_follow (
id int(11) NOT NULL AUTO_INCREMENT ,
user_id int(11) NULL DEFAULT NULL COMMENT '用户外键' ,
follow_user_id int(11) NULL DEFAULT NULL COMMENT '被关注用户外键' ,
is_valid tinyint(1) NULL DEFAULT NULL ,
created_date datetime NULL DEFAULT NULL ,
updated_date datetime NULL DEFAULT NULL ,
PRIMARY KEY (id)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=6
ROW_FORMAT=COMPACT;
Redis数据结构
# Redis
# 被关注列表
SADD "followers:1" "2" "3" "4" "5"
SADD "followers:2" "3" "4" "5" "6"
# 关注列表
SADD "following:2" "1"
SADD "following:3" "1" "2"
SADD "following:4" "1" "2"
SADD "following:5" "1" "2"
SADD "following:6" "2"
共同关注列表
- 从Redis中读取登录用户的关注列表与查看用户的关注列表,然后进行交集操作,获取共同关注的用户id
# Redis
# ID2是共同关注的ID
> SINTER following:6 following:5
2
# 例子2
> SINTER following:4 following:5
1
2
Comments NOTHING