如何实现一个计数系统

这两天老师出了一个题目:如何实现一个技术系统,大概需求是这样的:
①可以支持模糊计数,这类数据对精确度不高,例如商品的浏览量,点赞数
②可以支持精确计数,这类数据要求精确度比较高,例如我收藏的商品、买到的商品、卖出的商品、发布的商品

拿到这个题目,我们可以看到两种场景:第一种模糊计数:对数据的一致性不高,但要能实时取到数据。第二种精确技术,对数据的一致性和准确度要求较高。

先来看第一种模糊计数,这种情况有几个特点:
1、查询频率高,读多写少
2、数据一致性不高
我们很容易的,就想到了用Redis做缓存:
如果按照我们一开始的,可能会觉着有几个计数,就搞几个key,这样从业务上还得连着查几次,比较麻烦,后来经过改良,成这个样子:

image.png

再来看第二种准确计数,这种情况由于对数据一致性较高,所以我们宁愿有点延迟,也要保证数据是比较准确的。所采用的方案如下:
因为从消息过来,有很多数据是会有延迟,以及重复的,所以我们要有个纠正数据的机制。这里采用了定时去检查最新的数据,并通知到计数服务里的方案


image.png

你可能感兴趣的:(如何实现一个计数系统)