Redis如何实现好友功能

发布于 2023-06-19  300 次阅读


目标:实现关注/取关、关注列表,共同好友

设计思路

总体思路我们采用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

届ける言葉を今は育ててる
最后更新于 2023-06-19