由spring托管的controller是单例的,正常情况下大并发访问同一接口,应该是会出现并发问题的,现在公司有一个抢购功能需要实现,数据库中有一个字段保存了当前商品剩余量,每次请求如果成功会将这个剩余量减1,多并发的情况会不会将这个值扣减为负数,请问这块功能应该从哪几个维度去考虑,如果不使用异步处理,在保证效率的前提下该如何解决并发问题
controller单例并不会成为并发瓶颈,应为线程使用对象的方法并不需要加锁。
数据库本身就可以控制,比如SQL Server两句语句就可以搞定
UPDATE 库存表 SET 剩余量=剩余量-1 WHERE 商品ID=123 AND 剩余量>1
SELECT @@ROWCOUNT
@@ROWCOUNT返回1就是成功,返回0就是失败(剩余量不足),其它数据库也有类似的方法。