您当前的位置: 首页 >  redis

Redis实现社交粉丝功能

发布时间:2021-01-27 21:04:33 ,浏览量:0

好友相关的功能至少包含

  • 关注 / 取关
  • 我(他)的关注
  • 我(他)的粉丝
  • 共同关注
  • 我关注的人也关注他

这样的功能如果采用数据库,只是单纯得到用户的一些粉丝或者关注列表,也很简单、易实现,但若我想查出两个甚至多个用户共同关注人或想查询两个或者多个用户的共同粉丝,就会很麻烦,效率也不会很高。

但如果用 redis 去做的话就会相当的简单且高效。因为 redis 自己本身带有专门针对于这种集合的交集、并集、差集的一些操作。 总体思路我们采用 MySQL + Redis 的方式结合完成。

  • MySQL 保存落地数据
  • Redis 的 Sets 进行集合操作
数据表设计
CREATE TABLE `t_follow` ( `id` int(11) NOT NULL AUTO_INCREMENT , `diner_id` int(11) NULL DEFAULT NULL COMMENT '用户外键' , `follow_diner_id` int(11) NULL DEFAULT NULL COMMENT '用户食客外键' , `is_valid` tinyint(1) NULL DEFAULT NULL , `create_date` datetime NULL DEFAULT NULL , `update_date` datetime NULL DEFAULT NULL , PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci AUTO_INCREMENT=6 ROW_FORMAT=COMPACT; 

创建代码模块 ms-follow

<dependencies>  <dependency> <groupId>org.springframework.cloud <dependency> <groupId>org.springframework.boot <dependency> <groupId>mysql <dependency> <groupId>org.springframework.boot <dependency> <groupId>org.mybatis.spring.boot <dependency> <groupId>com.battcnspring.cloud.client.ip-address}:${server.port} client: service-url: defaultZone: http://localhost:8080/eureka/ service: name: ms-oauth-server: http://ms-oauth2-server/ ms-diners-server: http://ms-diners/ mybatis: configuration: map-underscore-to-camel-case: true # 开启驼峰映射 logging: pattern: console: '%d{HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n' 
实体类
@ApiModel(description = "食客关注实体类") @Getter @Setter public class Follow extends BaseModel { @ApiModelProperty("用户ID") private int dinerId; @ApiModelProperty("关注用户ID") private Integer followDinerId; } 
业务流程

共同关注

Sets 拥有去重 (我们不能多次关注同一用户) 功能 。一个用户我们存贮两个集合:一个是保存用户关注的人 另一个是保存关注用户的人。

RedisKeyConstant

following(“following:”, “关注集合Key”), followers(“followers:”, “粉丝集合Key”),

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    115984博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0960s