redis分布式缓存(二十三)一一微博关注与粉丝解决方案

微博关注与粉丝的业务场景分析

  • 张三关注了李四:张三就是李四的粉丝
  • 李四被张三关注:李四就是张三的关注者

微博关注与粉丝的redis技术方案

技术方案:每个用户都有2个集合:关注集合和粉丝集合

例如 张三关注了李四,做了2个动作

  1. 把张三的userid加入李四的粉丝follower集合set
  2. 把李四的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);
    }
复制代码

redis分布式缓存系列文章

上一篇:redis分布式缓存(二十二)一一 帖子点赞解决方案