电商系统高并发场景下,如何进行扣减库存?

提问者:帅平 问题分类:微服务
电商系统高并发场景下,如何进行扣减库存?有没有什么实际生产中使用的方案?

 您阅读本篇文章共花了: 

1 个回答
人潮似海遇见你°
人潮似海遇见你°
实际生产中我们采用的方案是:Redis扣减库存时,同步在业务数据中insert库存信息。流程图如下:
发布于:1年前 (2023-03-17) IP属地:四川省
白雨矮碧荷
白雨矮碧荷
这里既有redis扣减库存,又有数据库的操作,那么如何保证事务呢?
发布于:1年前 (2023-03-17) IP属地:四川省
陈词滥调°
陈词滥调°
这里既有redis扣减库存,又有数据库的操作,那么如何保证事务呢?
这里其实就相当于没有用到redis的事务做真实的判断业务逻辑处理了,而把缓存扣减放在数据库insert的事务内,通过数据库的事务保证整体的事务。
insert的表被称为库存任务表,其中保存了库存扣减的信息,库存任务表结构可以设计的非常简单,主键 + 库存信息(json字符串)就可以了。
后续通过异步任务,从库存任务表表中查询出库存更新信息,将其同步到具体的库存表中,实现最终一致性,这种方案可以避免数据的丢失。
发布于:1年前 (2023-03-17) IP属地:四川省
一闪一闪亮晶晶べ
一闪一闪亮晶晶べ
这里其实就相当于没有用到redis的事务做真实的判断业务逻辑处理了,而把缓存扣减放在数据库insert的事务内,通过数据库的事务保证整体的事务。
insert的表被称为库存任务表,其中保存了库存扣减的信息,库存任务表结构可以设计的非常简单,主键 + 库存信息(json字符串)就可以了。
后续通过异步任务,从库存任务表表中查询出库存更新信息,将其同步到具体的库存表中,实现最终一致性,这种方案可以避免数据的丢失。
异步更新业务库存在延迟,库存逆向回退如何保证?
发布于:1年前 (2023-03-17) IP属地:四川省
三岁就可萌了
三岁就可萌了
异步更新业务库存在延迟,库存逆向回退如何保证?
库存回退是根据业务库中扣减记录进行回退的,由于异步更新业务库必定存在延迟(延迟极低,数秒以内),所以极端场景会存在走退款逆向流程时业务库的库存扣减记录还未更新。
针对这种情况库存回退设置延迟重试机制,如果再极端点达到重试阈值依旧没有扣减记录,则返回回退成功,不做阻断。
发布于:1年前 (2023-03-17) IP属地:四川省
吹南风
吹南风
这里使用redis扣减库存,主要是减轻mysql的访问压力,为什么这里扣减了库存之后,还要去数据库进行插入操作呢?这样mysql的性能如何保证?
发布于:1年前 (2023-03-17) IP属地:四川省
丶殇
丶殇
这里使用redis扣减库存,主要是减轻mysql的访问压力,为什么这里扣减了库存之后,还要去数据库进行插入操作呢?这样mysql的性能如何保证?
这里的考虑主要有两点:
1、redis宕机或者故障,可能会造成缓存内库存数据的丢失。所以一定需要做数据的持久化操作。
2、由于数据库insert比update性能优,insert是在表的末尾直接插入,没有寻址的过程,可以保证性能比较快。
发布于:1年前 (2023-03-17) IP属地:四川省
我来回答