美文网首页
微博案例-互相关注

微博案例-互相关注

作者: 神仙苏醒 | 来源:发表于2020-06-23 12:28 被阅读0次

个人认为这个案例还是很经典的

  • 这个案例很好的实现了,如何记录我关注了哪些人,哪些人关注了我
  • 用set 结构进行去重, 关键是当我关注别人的时候如何存储
    上代码:
  /**
     * 关注别人
     * @param userId 自己
     * @param followUserId 你要关注的人
     */
    public void follow(long userId, long followUserId){

        //我关注了谁 需要在我关注的人的 集合中增加一条记录
        jedis.sadd("user::" + followUserId +"::followers",String.valueOf(userId));
        //我关注人的集合
        jedis.sadd("user::" +userId + "::follow_users",String.valueOf(followUserId));
    }
  • 以上代码中一个方法内,存储了两个SET,那么这两个set是干嘛的那
    试想我们如果不用redis,用数据库存储的话,是不是需要设计数据库表,那么我们就会这样设计,
    一张是用户表,记录用户基础信息
    一张是用户关注明细,记录谁关注了此用户,字段为userId,follwUserId
    我们在检索的时候查询 我被谁关注了 就直接select * from 关系表 where userId= 自己
    那么检索我关注了谁那? 就是select * from 关系表 where follwUserId= 自己
    是不是很简单,但是这样每次查库性能是不行的,所以我么要将这些数据提前聚合到缓存中:
  • 也就出现了 上段代码中的:两个set
  • 一个set用来存储被关注的人的集合中插入谁关注了他,谁那,就是我,key为我要关注的人的id,"user::" + followUserId +"::followers" value:为 自己
  • 一个set用来存储我关注了哪些人的集合, 那么key 为自己的id, value为你所关注的人

取消关注

/**
    * 取消关注
    * @param userId
    * @param followUserId
    */
   public void unfollow(long userId, long followUserId){
       jedis.srem("user::" + followUserId +"::followers",String.valueOf(userId));
       jedis.srem("user::" +userId + "::follow_users",String.valueOf(followUserId));
   }

查看哪些人关注了我

/**
     * 查看有哪些人关注了我
     * @param userId
     * @return
     */
    public Set<String> getFollowers(long userId){
        return jedis.smembers("user::" + userId +"::followers");
    }

    /**
     * 查看我关注了哪些人
     * @param userId
     * @return
     */
    public Set<String> getFollowUsers(long userId){
        return jedis.smembers("user::" +userId + "::follow_users");
    }
    /**
     * 查看自己关注的人数
     * @param userId
     * @return
     */
    public long getFollowUsersCount(long userId) {
        return jedis.scard("user::" + userId + "::follow_users");
    }
    /**
     * 查看自己关注的人数
     * @param userId
     * @return
     */
    public long getFollowersCount(long userId){
        return jedis.scard("user::" +userId + "::follow_users");
    }

    /**
     * 获取用户跟其他用户之间共同关注的人有哪些
     * @param userId
     * @param otherUserId
     * @return
     */
    public Set<String> getSameFollowUsers(long userId, long otherUserId){
       return jedis.sinter("user::" +userId + "::follow_users",
               "user::" +otherUserId + "::follow_users");
    }

   /**
     * 获取给我推荐的可关注人
     * 我关注的某个好友关注的一些人,我没关注那些人,此时推荐那些人给我
     * @param userId
     * @param otherUserId
     * @return
     */
    public Set<String> getRecommendFollowUsers(long userId, long otherUserId){
        return jedis.sdiff("user::" +userId + "::follow_users",
                "user::" +otherUserId + "::follow_users");
    }

很不错的案例

相关文章

  • 微博案例-互相关注

    个人认为这个案例还是很经典的 这个案例很好的实现了,如何记录我关注了哪些人,哪些人关注了我 用set 结构进行去重...

  • 我知道你在看我

    我是在他的微博里发现她的微博的。 我没有关注他的微博,但他关注了我的微博。表白失败后微信就成了摆设,我和他互相不说...

  • 什么是恰当的社交距离感

    以早年的微博举例。 在微博上关注我的人,我关注的人,在现实中可以是我的熟人,或者半个熟人,我们互相观察对方的思想,...

  • 关于你

    2017.09.28,我们互相关注了新浪微博 2017.12.24,我们加了微信 2018.03.31,我第一次在...

  • iOS_不规则Cell的TableView相关设计

    案例一:微信,按发送和接收分为左右,图片、文本、语音、红包、文件等等; 案例二:微博,图文混合。 相比微博,那显然...

  • 关于微博关注

    有时候确实也有些迷茫, 不知道为什么自己突然涨了好多粉。 虽然底下评论的来来去去就是那么几个, 但是看着阅读量还是...

  • 过去现在,一并深爱

    我们互相忘记 在关注和被关注的细节里 手机推送微博被你关注之后点进去往往都是幻影 好多时候我都觉得自己看得真切 但...

  • 余生一句我陪你 32.真是事情多的要死

    热巴随后便看到,自己的微博上,跟大明星邓予显示成了互相关注,心情一下子那个舒畅。 点进了邓予微博,就看到他...

  • 看见你和她的瞬间,突然很孤单

    前两天翻你的微博,看到了你和现女友的照片,不知道你们为什么没有互相关注。这个女孩应该很喜欢你把,没有在你的微博看到...

  • 命运许我以平淡,我许命运以不甘

    前两天,杨超越又上了热搜。 在微博上,有细心网友发现,篮球巨星科比·布莱恩特和她的微博已经互相关注,两人将在一周后...

网友评论

      本文标题:微博案例-互相关注

      本文链接:https://www.haomeiwen.com/subject/pnvmxktx.html