库存中心优化方案

遇到的问题

1.目前扣库存是MySQL,行锁来保证库存不超买

2.扣库存方法执行流程  1:开启实物  2:记录消费唯一明细(保证业务幂等),3:扣除库存  4:提交事务

3.现象:同一个商品并发高时出现扣库存事务执行缓慢


关键算法(方案)

方案1

1.将库存数据缓存到Redis, 查询,批量查询是使用,减轻数据库的压力

2.扣库存以RDS数据库为扣库存解决方案为主(要RDS开启  rds_ic_reduce_hint_enable 参数)

以下是原生MySQL行锁扣库存和RDS数据库扣库存解决方案压力测试数据对比

RDS(AliSQL)
扣库存
20 1167.31 16.51 361865 0 0.00%
MySQL 扣库存 20 156.38 129.75 20329 0 0.00%
数据库
事务名
并发用户
TPS
RT(ms)
执行事务数
失败事务数
失败率
update COMMIT_ON_SUCCESS ROLLBACK_ON_FAIL QUEUE_ON_PK 100 TARGET_AFFECT_ROW 1 t1 set c=c-1 where id=100 and c>=1;

注:

1. COMMIT_ON_SUCCESS   ROLLBACK_ON_FAIL 原有的开启事务异常回滚事务不支持。

2. update时原生SQL 会返回影响的行数如返回修改0行, 改为QUEUE_ON_PK 100 TARGET_AFFECT_ROW 1 修改时where条件不满足时返回异常 UncategorizedSQLException  : The affected row number does not match that of user specified

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值