微博不能关注怎么回事20566 微博不能关注人了是怎么回事

需求分析好友功能是目前社交场景的必备功能之一,一般好友相关的功能包含有:关注/取关、我(他)的关注、我(他)的粉丝、共同关注、我关注的人也关注他等这样一些功能 。

微博不能关注怎么回事20566 微博不能关注人了是怎么回事


类似于这样的功能我们如果采用数据库做的话只是单纯得到用户的一些粉丝或者关注列表的话是很简单也很容易实现, 但是如果我想要查出两个甚至多个用户共同关注了哪些人或者想要查询两个或者多个用户的共同粉丝的话就会很麻烦 , 效率也不会很高 。
但是如果你用redis去做的话就会相当的简单而且效率很高 。原因是redis自己本身带有专门针对于这种集合的交集、并集、差集的一些操作 。
微博不能关注怎么回事20566 微博不能关注人了是怎么回事


设计思路总体思路我们采用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 …] ——–共同关注、我关注的人关注了他
数据库表设计这个数据库表的结构比较简单,主要记录了用户id、用户关注的id和关注状态 。
CREATE TABLE `t_follow` (`id` int(11) NOT NULL AUTO_INCREMENT,`user_id` int(11) DEFAULT NULL COMMENT '当前登录用户的id',`follow_user_id` int(11) DEFAULT NULL COMMENT '当前登录用户关注的用户的id',`is_valid` tinyint(1) DEFAULT NULL COMMENT '关注状态,0-没有关注,1-关注了',`create_date` datetime DEFAULT NULL,`update_date` datetime DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='用户和用户关注表';新建好友功能微服务添加依赖和配置pom依赖如下:
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>redis-seckill</artifactId><groupId>com.zjq</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>ms-follow</artifactId><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><!-- commons 公共项目 --><dependency><groupId>com.zjq</groupId><artifactId>commons</artifactId><version>1.0-SNAPSHOT</version></dependency><!-- swagger --><dependency><groupId>com.battcn</groupId><artifactId>swagger-spring-boot-starter</artifactId></dependency></dependencies></project>

推荐阅读