有个关于并发的问题想请教下

2021-01-05 18:04:12 +08:00
 jtping

最近在做一个电商项目,现在到了扣库存这一块,扣库存时有什么好的上锁方案吗 (要有一定的并发能力)

具体是这样的:

最开始用 redisson 分布式锁把整个生成订单事务都锁了(扣库存操作在里面),但这样效率不高。

现在改用悲观锁(用的 MySQL ),可感觉悲观锁的效率还是不够高,我也去网上找过,都不太建议库用悲观锁。

想过把库存信息都放到 reids 中,把所有库存信息都放到 reids 中可行吗?有没有什么弊端

之前这方面接触的也不多,有没有什么好的解决方案,望大神赐教

2156 次点击
所在节点    程序员
25 条回复
jtping
2021-01-05 18:11:06 +08:00
自定
xiaomu8
2021-01-05 18:17:19 +08:00
开发日活百万
上线日活一百
jtping
2021-01-05 18:19:43 +08:00
@xiaomu8 哈哈哈 还是要稍微做点准备的 万一火了呢
YouLMAO
2021-01-05 19:39:26 +08:00
一般都是这样的,为什么效率不高? 有没有分析过生成订单最慢的 top 5 操作
jtping
2021-01-05 19:48:50 +08:00
@YouLMAO 这个还真不了解 望指点
simonlu9
2021-01-05 19:48:57 +08:00
库存采用分段锁,可以提高效率
jtping
2021-01-05 19:51:23 +08:00
@simonlu9 应该还不到用分段锁的地步
opengps
2021-01-05 19:52:45 +08:00
库存放在 redis 很常见,弊端就是对逻辑要求比较严谨,需要综合考虑各种极端情况,比如:
断电怎么办
锁是否彻底能够做到库存不超额
数据库变更时候缓存刷新是否有残留变更
等等
YouLMAO
2021-01-05 20:00:05 +08:00
我觉得网民和我讨论场景不同,他们是考虑秒杀? 我是考虑有 5 千万商品在售,每件商品 50 库存,一分钟有 1 万人下单但下的是不同商品呀
jtping
2021-01-05 20:00:51 +08:00
@opengps 学习了 感谢
securityCoding
2021-01-05 20:02:34 +08:00
独立库存组件出来 , 配合 redis 用 write through(这玩意不知道咋翻译)方式管理库存 ,后面挂个队列异步通知 db 扣减库存(最终一致性)
YouLMAO
2021-01-05 20:03:55 +08:00
不是秒杀场景用 Redis,可以准备跑路
securityCoding
2021-01-05 20:04:31 +08:00
@YouLMAO 5000w sku 你真敢想...
jtping
2021-01-05 20:04:49 +08:00
@YouLMAO 我就是这个意思!用悲观锁 万一有其他请求进来就要等了 用户体验不太好
jtping
2021-01-05 20:06:03 +08:00
@YouLMAO 没呢 项目还没上线
YouLMAO
2021-01-05 20:06:28 +08:00
@jtping 那你是秒杀还是非秒杀???下单的是不同商品,不会互相锁库存喔为什么要等
jtping
2021-01-05 20:07:02 +08:00
@securityCoding 方便给个关键词吗 我去网上找找
YouLMAO
2021-01-05 20:08:17 +08:00
@jtping 分段锁也是秒杀场景的,直接百度
securityCoding
2021-01-05 20:08:26 +08:00
@jtping 小伙子 ,你是不是分布式锁把整个下单接口都锁住了? 锁下单商品那个 sku 就行了
jtping
2021-01-05 20:08:55 +08:00
@YouLMAO 就是普通的购买 比如 1 秒内对同一个商品下单 10 次 这个就需要等了(这种情况应该会出现吧)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/741961

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX