库存设计:
一个商品主表 ------------
100条库存记录,每各库存记录49个库存;额外一条保障库存记录有100个库存100个 一共101条库存记录;共5000库存
如何实现下单功能:
1 如何实现减库存
2 如何确保快速获取到库存个数大于0的库存记录并实现减库存
3 如何保障5000库存均被消费
写请求直接到库 读请求走缓存,实时性延迟处理 添加商品确保每个stock有一定的数量,比如下限100,如果小于100可能衍生成为普通库存记录【1条记录】
market
id product_id stock label
1 12 0
1 22 0
1 32 0
1 0 0
1 0 0
1 1 0
1 12 0
1 45 0
1 21 1 // 表示优先级较低的库存,防止并发都到了某一条库存记录,导致存在库存但减库存失败
如何减库存?
减库存领域干减库存这个事情,如何设计?
data = select * from market where stock > 0 and label = 0 and product_id =1 limit 0,1
if data!=null
success = update market set stock = stock - 1 where stock >= 1 and id = ?
if success
return
else
ok = update market set stock = stock - 1 where stock >= 1 and label = 1 and id = ?
if ok:
return
else:
throw new Exception("库存不足")
else:
ok = update market set stock = stock - 1 where stock >= 1 and label = 1 and id = ?
if ok:
return
else:
throw new Exception("库存不足")
下单成功后,将请求减少命令异步发给Redis 【造成现象,用户看到库存下单提示库存没有】