微博关注与粉丝的业务场景分析
- 张三关注了李四:张三就是李四的粉丝
- 李四被张三关注:李四就是张三的关注者
微博关注与粉丝的redis技术方案
技术方案:每个用户都有2个集合:关注集合和粉丝集合
例如 张三关注了李四,做了2个动作
- 把张三的userid加入李四的粉丝follower集合set
- 把李四的userid加入张三的关注followee集合set
集合key设计
- 张三的关注集合 key=followee:张三userid
- 李四的粉丝集合 key=follower:李四userid
SpringBoot+Redis 实现微博关注与粉丝
功能1:关注
/**
* 张三关注了李四,张三即使李四的粉丝 follower
* userId=张三
* followeeId=李四
*/
@ApiOperation(value="关注")
@PostMapping(value = "/follow")
public void follow(Integer userId,Integer followeeId) {
relationService.follow(userId,followeeId);
}
复制代码
/**
* 张三关注了李四
*/
public void follow(Integer userId,Integer followeeId){
SetOperations<String, Integer> opsForSet = redisTemplate.opsForSet();
//张三的关注集合
String followeekey = Constants.CACHE_KEY_FOLLOWEE + userId;
//把李四的followeeId,加入张三的关注集合中
opsForSet.add(followeekey,followeeId);
//李四的粉丝集合
String followerkey=Constants.CACHE_KEY_FOLLOWER+followeeId;
//把张三的userid加入李四的粉丝follower集合set
opsForSet.add(followerkey,userId);
}
复制代码
功能2:我的关注
@ApiOperation(value="查看我的关注")
@GetMapping(value = "/myFollowee")
public List<UserVO> myFollowee(Integer userId){
return this.relationService.myFollowee(userId);
}
/**
* 查看我的关注
*/
public List<UserVO> myFollowee(Integer userId){
SetOperations<String, Integer> opsForSet = redisTemplate.opsForSet();
//关注集合
String followeekey = Constants.CACHE_KEY_FOLLOWEE + userId;
Set<Integer> sets= opsForSet.members(followeekey);
return this.getUserInfo(sets);
}
复制代码
功能3:我的粉丝
@ApiOperation(value="查看我的粉丝")
@GetMapping(value = "/myFollower")
public List<UserVO> myFollower(Integer userId){
return this.relationService.myFollower(userId);
}
复制代码
/**
* 查看我的粉丝
*/
public List<UserVO> myFollower(Integer userId){
SetOperations<String, Integer> opsForSet = redisTemplate.opsForSet();
//粉丝集合
String followerkey=Constants.CACHE_KEY_FOLLOWER+userId;
Set<Integer> sets= opsForSet.members(followerkey);
return this.getUserInfo(sets);
}
复制代码




近期评论