Redis实现社交粉丝功能

网友投稿 766 2022-05-30

好友相关的功能至少包含

关注 / 取关

我(他)的关注

我(他)的粉丝

共同关注

我关注的人也关注他

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

但如果用 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;

1

2

3

4

5

6

7

8

9

10

11

12

13

创建代码模块 ms-follow

org.springframework.cloud spring-cloud-starter-netflix-eureka-client org.springframework.boot spring-boot-starter-web mysql mysql-connector-java org.springframework.boot spring-boot-starter-data-redis org.mybatis.spring.boot mybatis-spring-boot-starter com.battcn swagger-spring-boot-starter

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

配置文件

server: port: 8084 # 端口 spring: application: name: ms-follow # 应用名 # 数据库 datasource: driver-class-name: com.mysql.cj.jdbc.Driver username: root password: 123456 url: jdbc:mysql://127.0.0.1:3306/db_redis?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useUnicode=true&useSSL=false # Redis redis: port: 6379 host: 192.168.10.101 timeout: 3000 password: 123456 database: 2 # Swagger swagger: base-package: com.javaedge.follow title: 慕课美食社交食客API接口文档 # 配置 Eureka Server 注册中心 eureka: instance: prefer-ip-address: true instance-id: ${spring.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'

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

Redis实现社交粉丝功能

38

39

40

41

42

43

44

45

实体类

@ApiModel(description = "食客关注实体类") @Getter @Setter public class Follow extends BaseModel { @ApiModelProperty("用户ID") private int dinerId; @ApiModelProperty("关注用户ID") private Integer followDinerId; }

1

2

3

4

5

6

7

8

9

10

11

业务流程

共同关注

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

RedisKeyConstant

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

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

Redis

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:NPM:nodejs官方包管理工具的简介、安装、使用方法之详细攻略
下一篇:Node.js学习笔记(十五、Web模块)
相关文章