计数服务
一、实现方案
DB辅以Cache
适用于计数相对比较精准的场景
查询计数时先查询Cache,Cache中没有则Count DB,缓存到Cache并返回
Cache辅以DB
适用于计数不太精确的场景
加减计数直接操作Cache,聚合计数请求后固化结果到DB,以备恢复Cache使用
DB Count
二、模糊计数
点赞数、转发数等场景
一般方案
- 本地服务缓存计数事件
- 当本地缓存到达阈值(时间、容量等)时,批量写入Cache
- 同时固化计数到DB
一致性问题
定期同步数据
三、精准计数
收藏数、发布数等场景
一般方案
- 计数服务接收计数事件
- 存入计数值到Cache(或删除等待查询时再加载)
一致性问题
自定义两阶段提交
- Prepare
发送事务ID,事件信息到MQ,tag为Prepare
计数服务接收事件后存入事件信息,并用zset获取超时的事件,对于超时的事件回查DB设置计数
为了方式Commit先到,用事务ID校验幂等性
- Commit
操作计数,删除事件信息
- Cancel
删除事件信息