Skip to content

Latest commit

 

History

History
33 lines (9 loc) · 1.83 KB

151.md

File metadata and controls

33 lines (9 loc) · 1.83 KB

151、关于重复点赞问题以及点赞查看时效性的方案设计

我看到了你的朋友圈,此时我就可以对你的朋友圈去进行一个点赞,也可以取消点赞,假设要设计成支撑高并发的点赞系统,应该如何设计?

朋友圈的点赞和评论,是独立的数据,其实比如点赞,都是可以基于redis来做的,每个朋友圈里对应一个set数据结构,里面放谁给你点赞了,这样每条朋友圈的点赞人和点赞数量直接从redis出就可以了,smembers和scard

假设通过数据库的表来存放点赞的数据,此时可以通过联合唯一键来保证幂等性,用户id+朋友圈id是一个联合唯一索引,就可以确保一个人对一条朋友圈只能点赞一次,如果通过redis里的set来实现,set本身就是可以去重的,你多次把一个人放到一条朋友圈的set里去,是不会重复的

评论也是可以存表里的,都是以朋友圈为粒度来存储

那么刷朋友圈的时候,比如说你好友和你,另外一个好友都是好友,此时你好友刷到了你的朋友圈,就可以把另外一个好友对你的点赞和评论都拉出来,展示在客户端下面就可以了,这个展示过程可以是动态的

你是王五,你的朋友圈被张三点赞了,李四跟你们也是好朋友,此时李四刷朋友圈看到了王五发的这条朋友圈,此时你可以在后台,对这条朋友圈的set用张三做一个sismember操作,就是判断一下你们俩的所有共同好友,有哪些人对这条朋友圈点赞了

此时就可以看出来这条朋友圈被你们的共同好友多少人点赞了,哪些人点赞了

比如你另外一个好友是否对这条朋友圈点赞了,直接sismember就可以判断出来,这样整个你基于redis,他都是非常高性能的