计数服务


一、实现方案

DB辅以Cache

适用于计数相对比较精准的场景

查询计数时先查询Cache,Cache中没有则Count DB,缓存到Cache并返回

Cache辅以DB

适用于计数不太精确的场景

加减计数直接操作Cache,聚合计数请求后固化结果到DB,以备恢复Cache使用

DB Count

二、模糊计数

点赞数、转发数等场景

一般方案

  1. 本地服务缓存计数事件
  2. 当本地缓存到达阈值(时间、容量等)时,批量写入Cache
  3. 同时固化计数到DB

一致性问题

定期同步数据

三、精准计数

收藏数、发布数等场景

一般方案

  1. 计数服务接收计数事件
  2. 存入计数值到Cache(或删除等待查询时再加载)

一致性问题

自定义两阶段提交

  1. Prepare

发送事务ID,事件信息到MQ,tag为Prepare

计数服务接收事件后存入事件信息,并用zset获取超时的事件,对于超时的事件回查DB设置计数

为了方式Commit先到,用事务ID校验幂等性

  1. Commit

操作计数,删除事件信息

  1. Cancel

删除事件信息

事务消息