基于日志先行的库存扣减问题

100 阅读1分钟

1、前言

电商系统的库存扣减问题是高并发场景的一个经典案例了,在这个场景中,需要考虑很多问题,包括防止超卖、保证数据一致性、提升系统响应速度、让用户体验更好等。作者最近项目开发过程中碰到了相似的问题场景,简单整理了一下,通过这篇文章介绍一种围绕日志先行进行库存扣减的解决方案,希望大家在碰到类似问题时也能使用这个方法进行解决。

2、详细介绍

日志先行,是mysql的一种保证数据准确存储的技术,在真正写数据之前,会首先记录一个日志,叫Redo Log,然后定期将Redo Log记录的数据刷入磁盘。

这里借鉴这种思路,在库存扣减之时,首先进行预校验并记录一条日志流水,基于流水信息定期异步汇总更新数据库中的库存余额。这种操作有很多好处,一方面记录完日志后,请求就响应结束,一次请求的时间很短,对于用户的体验效果更好。另一方面,异步汇总更新时可以一次计算多条流水,减少数据库更新操作。