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

Echo 的点赞模块是怎么做的

点赞这个模块能讲的东西挺多的,它包含两个小模块:

1)实现点赞动作:

  • 支持对帖子、评论/回复点赞
  • 第 1 次点赞,第 2 次点击则取消点赞,并显示用户的点赞状态

2)查询获赞数量:

  • 查询每篇帖子的获赞数量
  • 查询每篇帖子和每个评论/回复的获赞数量
  • 查询我的获赞数量

Redis Key 规范

我们将点赞相关信息存入 Redis 中,关于 Redis 的配置这里就不说了。

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

  • 以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如,业务名:表名:id
  • 保证语义的前提下,控制 key 的长度,当 key 较多时,内存占用也不容忽视

Echo 中,当一个用户 A(id = 11)给另一个用户 B 的帖子(entityType = 1,entityId = 246)点了赞后,就会往 Redis 中存入这样一条记录:

key = like:entity:1:246, value = 11

key 的命名是这样的 like:entity:entityType:entityId,显然,like:entity 是不会变的,你可以把它理解为一个名为 like 的数据库下的 entity 表,value 即代表点赞用户 A 的 id。

上面这条记录的意思就是 id = 11 的用户对实体类型 1 即帖子进行了点赞,该帖子的 id 是 246。

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

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

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Echo 的关注模块是怎么做的

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

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

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

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

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

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

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

    飞天小牛肉
  • 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年了,结果还算比较满意,有些经验应该可以和大家一起分享、探...

    李海彬
  • kubernetes是怎么做资源管理的?

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

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

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

    dys
  • Rasch模型是怎么来的?

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

    二号姬
  • Python是怎样处理json模块的

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

    砸漏
  • 4G模块是什么?其有什么使用的特点效果

    通常来说,在物联网中的4G模块其主要就是用来支持TD-LTE,以及FDD-LTE之中的LTE网络制式,其具备了通讯更快、互联网频带宽、通讯灵活性等优势与特性。而...

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

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

    马克java社区

扫码关注云+社区

领取腾讯云代金券