Redis实现社交粉丝功能
【摘要】 好友相关的功能至少包含
关注 / 取关我(他)的关注我(他)的粉丝共同关注我关注的人也关注他
这样的功能如果采用数据库,只是单纯得到用户的一些粉丝或者关注列表,也很简单、易实现,但若我想查出两个甚至多个用户共同关注人或想查询两个或者多个用户的共同粉丝,就会很麻烦,效率也不会很高。
但如果用 redis 去做的话就会相当的简单且高效。因为 redis 自己本身带有专...
好友相关的功能至少包含
- 关注 / 取关
- 我(他)的关注
- 我(他)的粉丝
- 共同关注
- 我关注的人也关注他
这样的功能如果采用数据库,只是单纯得到用户的一些粉丝或者关注列表,也很简单、易实现,但若我想查出两个甚至多个用户共同关注人或想查询两个或者多个用户的共同粉丝,就会很麻烦,效率也不会很高。
但如果用 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
<dependencies> <!-- eureka client --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!-- spring web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- spring data redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <!-- swagger --> <dependency> <groupId>com.battcn</groupId> <artifactId>swagger-spring-boot-starter</artifactId> </dependency>
</dependencies>
- 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
- 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”),
文章来源: javaedge.blog.csdn.net,作者:JavaEdge.,版权归原作者所有,如需转载,请联系作者。
原文链接:javaedge.blog.csdn.net/article/details/113247677
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)