用Redis搞个自动点赞,给评论的小伙伴们打打气,氛围一下子就不一样了
- 问答
- 2026-01-16 16:49:16
- 2
(引用来源:知乎问题“如何用 Redis 实现点赞功能?”下的高赞回答思路,结合常见实现方案)
咱们得明白,点赞这事儿看着简单,就是点一下,数字加一,但真要做得靠谱,让小伙伴们点了赞有即时反馈,还不会因为人多就卡顿或者重复点赞,就得用点巧劲儿,关系型数据库比如MySQL,扛这种高频又简单的“点一下”操作,有点大材小用,还容易成为瓶颈,这时候,Redis这种内存数据库,速度快得像闪电,数据结构又特别灵活,就成了绝佳的选择。
那具体怎么“搞”呢?核心就是用Redis的几种数据结构来各司其职。
第一招:用集合(Set)搞定“一人只能赞一次”
这是最关键的,不能让同一个人对同一条评论无限点赞刷屏,对吧?Redis里的Set结构天生就是用来存唯一值的,一个Set里的元素都是不重复的,我们可以为每一条评论创建一个唯一的Redis Set。
有一条评论的ID是comment:12345,那我们就创建一个名叫like:comment:12345的Set,每当有一个用户(假设用户ID是user:67890)点了赞,我们就执行一个命令:SADD like:comment:12345 user:67890,这个命令的意思是,向like:comment:12345这个集合里添加成员user:67890。

妙处在于:如果这个用户已经点过赞了,他再次执行SADD,Redis会直接返回0,表示没有新成员加入,集合内容不变,这样一来,天然就防止了重复点赞,要判断某个用户是否点过赞,也用一条命令SISMEMBER like:comment:12345 user:67890就行了,返回1就是点过,0就是没点过。
第二招:用字符串(String)或者哈希(Hash)存点赞总数
光知道谁点了赞还不够,我们得快速地把点赞总数显示出来,虽然我们可以用SCARD like:comment:12345这个命令来获取Set的元素个数(也就是点赞总数),但在超高并发下,频繁计算Set的基数可能会有一点点压力,更常见的做法是,用一个简单的键值对来单独存储这个总数。
我们可以用一个字符串键:like:count:comment:12345,每当有用户成功点赞(即SADD命令返回1,表示是第一次点赞)时,我们就同时执行一个INCR like:count:comment:12345命令,让这个总数加1,同样,取消点赞时(用SREM命令从Set中移除用户),就执行DECR让总数减1,这样,每次显示点赞数的时候,只需要一个简单的GET like:count:comment:12345操作,速度快得飞起。

也有人喜欢用Hash结构,把一个主题下的所有评论的点赞数放在一起,比如一个叫like:counts的Hash,字段名是评论ID,字段值是点赞数,这样批量获取一批评论的点赞数时效率更高。
第三招:处理取消点赞和点赞状态同步
取消点赞的逻辑就是上面的逆过程,先检查用户是否在点赞Set里,如果在,就执行SREM like:comment:12345 user:67890把他移除,同时执行DECR like:count:comment:12345把总数减1。
这里有个细节,就是当用户刷新页面时,你需要告诉他,他之前有没有给这条评论点过赞,这个功能用我们第一步的SISMEMBER命令就能轻松实现,前端在加载评论列表时,除了拉取点赞总数,还可以同时发起请求,查询当前登录用户对这几条评论的点赞状态,然后相应地显示实心赞还是空心赞。

第四招:考虑持久化和数据同步
Redis是内存数据库,万一服务器重启,数据可能会丢失,你肯定不想小伙伴们辛辛苦苦点的赞一夜之间全没了吧?所以需要配置Redis的持久化机制,比如RDB快照或者AOF日志,定期把内存中的数据备份到硬盘上,这样即使Redis重启,也能从硬盘恢复数据。
通常Redis是作为缓存层和MySQL这类数据库一起使用的,我们可以把最终的点赞关系(谁点了谁的赞)和点赞总数异步地、批量地写回MySQL做永久存储,可以每隔一段时间,或者当点赞操作达到一定次数后,再把Redis里的数据同步到MySQL,这样既享受了Redis的速度,又保证了数据的最终可靠性。
氛围是怎么“不一样”的?
这么一套下来,你会发现,点赞变得异常流畅,用户点下按钮的瞬间,点赞数就变了,按钮状态也立刻切换,几乎没有延迟,这种即时反馈给用户的感受是非常积极的,他会觉得自己的互动被系统瞬间接纳和认可,参与感一下子就上来了,不像有些系统,点完赞要转半天圈圈,热情都给等没了。
因为Redis能轻松应对海量的并发点赞,即使评论区突然火了,成百上千的人同时点赞,系统也能稳如泰山,不会卡顿崩溃,这种稳定的体验,能让讨论氛围持续火热,大家会更愿意通过点赞这种方式进行轻量的互动,给评论者鼓励,从而形成正向循环,评论的小伙伴看到点赞数噌噌往上涨,自然也更受鼓舞,更愿意分享高质量的见解。
用Redis搞自动点赞,不仅仅是技术上的一个优化,它直接提升了产品的核心交互体验,让社区的“气”真正活了起来。
本文由度秀梅于2026-01-16发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/81902.html
