今天检查一个活动的卷,查看接口返回记录
接口日志1:2022-11-01 10:10:06 用时 26s 接口正常返回
接口日志2:2022-11-01 10:10:12 用时 26s 接口正常返回
查询数据:
1库存多扣减1,
2卡券多扣减1
结论:库存扣减环节没有问题,而是发生在卡券存在性判断环节,经过查询得知,卡券的查询环节使用的select结果集判断存在性,粗看没有问题
但是接口日志1耗时26s,接口2也差不多,很明显是在查询结果insert这个问题上产生了阻塞,导致结果1未返回前,结果2获取到的结果集为空,后续进入了扣库环节
处理方式:
使用redis的锁功能,限制用户在此接口只能等上一次提交返回后再能下一次提交,以后所有数据更新更新的接口,都需要使用redis的锁功能,保证数据在并发条件下的业务时空单一性