亿级点赞系统的设计
数据库表:
用户表(id, username, created_time)
视频表(id, userID, created_time)
点赞表(id, userid, videoid, created_time)
点赞计数表(video_id, like_count)
- 索引优化:针对点赞表的用户id和视频id建立联合索引。
- 分库分表:对点赞表分库分表。
- 读写分离:写用于主库,读用于分库。
- 批量操作:将多个点赞请求合并为批量操作,减少数据库写入次数。
- 缓存优化:点赞数放在Redis中,对于热门视频可以定时去查询。
- 异步点赞:把点赞请求放入消息队列中,消费者异步写入数据库。
设计一个游戏排行榜功能,要求能够实时查看自己的排名和全服前几名。
需求分析
- 实时查看自己的排名:玩家可以随时查询自己在全服中的排名。
- 全服前几名:支持快速查询全服前几名玩家的信息。
- 高并发支持:排行榜可能被大量玩家频繁访问,需要保证性能。
- 数据一致性:玩家的分数更新后,排行榜需要及时更新。
使用 Redis 的 ZSet
存储排行榜数据,score
作为战力分数,player_id
作为成员。
更新战力分数的时候,直接ZADD添加元素。
查询前几名:zrevrange。
查询自己排名:zreverank