专栏首页飞天小牛肉Echo 的关注模块是怎么做的

Echo 的关注模块是怎么做的

关注模块的总体实现方式和点赞模块其实差不多,包含如下几个功能:

  • 点击关注、二次点击取消关注
  • 统计用户的关注数、粉丝数(被关注)
  • 我的关注列表(查询某个用户关注的人);我的粉丝列表(查询某个用户的粉丝)

关注的目标可以是用户、帖子等,在实现时将这些目标抽象为实体就行了,目前为止 Echo 中只实现了关注用户功能。

大概的流程图如下:

1)关注、取消关注:

2)关注列表、粉丝列表:

Redis Key 规范

先达成一个共识:若 A 关注了 B,则 A 是 B 的粉丝(Follower),B 是 A 的目标(Followee)

为此,我们需要两张 Redis 表,一张用来存储某个用户关注的实体相关信息(做出关注这个事件的一定是人嘛,不可能说一张帖子去关注了一个用户,所以主语一定是用户),另一张用来存储某个实体拥有的粉丝(粉丝一定是用户)相关信息。

关于 Redis Key 规范,可以翻看Echo 的点赞模块是怎么做的这篇教程,这里我们同样需要用到 Redis 的数据结构 zset 天然的去重性。

1)第一张表:将某个用户关注的实体相关信息存储在 zset 中:key 是 followee:userId:entityType ,对应的 value 是 zset(entityId, now) ,以关注的时间进行排序。

比如说 followee:111:3 对应的 value (20, 2020-02-03-xxxx),表明 id = 111 的用户关注了实体类型为 3 即人(用户),该实体的 id 是 20,关注该帖子的时间是 2020-02-03-xxxx。

本文分享自微信公众号 - 飞天小牛肉(CS-Wiki),作者:飞天小牛肉

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-06-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Echo 的点赞模块是怎么做的

    需要特别注意的是,Redis key 命名需具有简洁性、可读性以及可管理性,根据阿里云的 Redis 开发规范,我们给 Redis key 起名的时候需要遵守这...

    飞天小牛肉
  • Echo 的系统通知模块是怎么做的

    系统通知是一个很常见且必要的需求,当发生点赞、关注、评论操作的时候,系统就会给相应的用户发送通知。

    飞天小牛肉
  • Echo 的注册功能是怎么做的

    另外,默认未激活的用户状态 status=0 也会存入数据库,当然,我们会为该注册用户随机生成一个唯一的激活码一并存入数据库:

    飞天小牛肉
  • Echo 的发帖操作是怎么做的

    最常用最原始的,form 表单。通过 form 表单以 post/get 方式提交数据,当你点击 submit 按钮时,浏览器会把你在 input 里面输入的数...

    飞天小牛肉
  • Echo 的发送私信是怎么做的

    这篇教程新鲜的东西不多,私信发送和帖子发布的做法如出一辙,都是使用 Ajax 异步实现,参见这篇文章:Echo 的发帖操作是怎么做的

    飞天小牛肉
  • Echo 的发布评论是怎么做的

    这样,处理发布评论这个逻辑的 Service 层方法就需要执行两次 DML 操作,所谓 DML 就是数据操纵语言, 属于 SQL 语言四大分类(数据查询语言 D...

    飞天小牛肉
  • Echo 的登录认证和授权是怎么做的

    首先,登录的时候会随机生成验证码,如何把这个验证码和当前用户对应起来,实现验证码的校验呢?

    飞天小牛肉
  • Echo 的帖子列表与分页是怎么做的

    业务逻辑这个模块的文章后续应该都会改成一元钱的付费文章了,emmm,算是一点精神上的慰藉吧。毕竟这种类型的文章不像 Java 八股文那样铺天盖地都是现成的博客、...

    飞天小牛肉
  • Echo 的私信列表与详情页是怎么做的

    需要注意的是:这张表不仅存储用户之间的私信,也存储系统通知,不同的是,系统通知的 from_id 特定为 1,而这个 id 为 1 的用户是我们手动内置进去的。

    飞天小牛肉
  • Deno TCP Echo Server 是怎么运行的

    在 “了不起的 Deno 入门教程” 这篇文章中,我们介绍了如何使用 Deno 搭建一个简单的 TCP echo server,本文将使用该示例来探究 TCP ...

    山月
  • Tensorflow的LRN是怎么做的

    LRN全称是local response normalization,局部响应归一化,想了解原理的点这个AlexNet(http://papers.nips.c...

    用户1332428
  • 我们是怎么做Code Review的

    前几天看了《Code Review 程序员的寄望与哀伤》,想到我们团队开展Code Review也有2年了,结果还算比较满意,有些经验应该可以和大家一起分享、探...

    李海彬
  • dubbo 和 zokeeper 是分别用来做什么的?他们的关系到底是怎么样的?

    之前在因公司产品项目做微服务拆分时使用了dubbo和zokeeper但感觉对他们的认知还是不太清楚。所以最近重新复习看了一下。用通俗的方式些事一下(如有错误请指...

    兜兜毛毛
  • kubernetes是怎么做资源管理的?

    在Kubernetes中,Pod是最小的调度单元,所以跟资源和调度相关的属性都是Pod对象的字段,而其中最重要的就是CPU和内存。如下所示:

    极客运维圈
  • Actor模型是做什么的?

    问题 用户A的操作 (1)开始事务 (2)操作资源1 (3)操作资源2 (4)提交事务 用户B的操作 (1)开始事务 (2)操作资源2 (3)操作资源1...

    dys
  • Rasch模型是怎么来的?

    刚开始接触项目反应理论的时候,可能很多人会对各种模型的来源不清楚,云里雾里,很多书籍里面对这部分也并没有写的很详细。有的甚至直接给出一个模型告诉你这个模型就是长...

    二号姬
  • 什么是 SRE?它和 DevOps 是怎么关联的?

    虽然 站点可靠性工程师(site reliability engineer)(SRE)角色在近几年变得流行起来,但是很多人 —— 甚至是软件行业里的 —— 还...

    用户1880875
  • Python是怎样处理json模块的

    JSON:JavaScript Object Notation 【JavaScript 对象表示法】

    砸漏
  • java中"Static块"是怎么回事,怎么用的,有什么意义

    Static块:该类的任何方法被首次触碰到时(马克-to-win: when you touch Test的main方法时),Static块被运行。可以在里面初...

    马克java社区

扫码关注云+社区

领取腾讯云代金券