点赞计数器

设计一个高性能计数器,支持文章点赞、视频点赞等功能

系统设计高并发计数器Redis

系统演进路线

从数据库加一到互动数据平台

第 1 版

数据库加一

文章页上线第一个点赞按钮,直接更新 `like_count`。

点赞表计数字段事务更新

能保证准确,但热门文章会形成数据库写热点。

第 2 版

Redis 原子计数

点赞 QPS 上升,计数写入需要从数据库移到内存。

INCRSet 去重异步落库

吞吐提升后,一致性、冷启动和补偿成为核心问题。

第 3 版

分片与合并写

单 key 热点和大 V 内容爆发,需要削峰和分散压力。

分片计数本地缓冲批量同步幂等记录

计数系统开始接受短暂不准确,用最终一致换吞吐。

生产版

互动数据平台

点赞数要进入 Feed、排行榜、推荐特征和风控。

行为日志排行榜Feed 展示反刷赞监控校准

生产级计数器既是展示数字,也是内容分发和治理信号。

课程简介

系统总览
点赞计数系统总览
把高频写入、缓存计数、异步落库和展示一致性放在一条链路里理解。
写入
点赞事件
去重记录
计数增量
计数
Redis INCR
分片计数
合并写入
展示
Feed 计数
排行榜
一致性修复

点赞计数看起来只是一个数字加一,但在真实产品里,它会很快变成高并发系统问题:同一篇文章被大量用户同时点赞,数据库如何避免写热点?用户是否点过赞如何判断?点赞数是否必须实时准确?排行榜如何更新?Feed 流里如何展示好友点赞?

这门课从最简单的数据库计数开始,逐步演进到 Redis 原子计数、高并发合并写、分布式一致性、点赞记录、Feed 展示和排行榜能力。

学习路线

  1. 计数器概述:从业务场景出发,理解点赞系统为什么不只是 count + 1
  2. 基础计数器设计:用数据库实现第一版,并暴露并发更新和写热点问题。
  3. Redis 计数:引入 INCR 提升吞吐,并讨论持久化、冷启动和一致性。
  4. 高并发优化:通过本地缓存、分片计数和合并写削峰。
  5. 分布式计数:处理多实例并发、Lua 脚本、分布式锁和一致性边界。
  6. 点赞 Feed 流:记录谁点赞了什么,并在内容流中正确展示。
  7. 排行榜功能:用 ZSet 和分页优化构建实时点赞榜。
  8. 完整系统:总结最终架构、关键取舍和上线检查清单。

读完后,你应该能判断一个计数系统在哪些地方需要强一致,哪些地方可以最终一致,以及如何在性能和准确性之间做取舍。

章节