怎么处理高并发秒杀商品?比如只剩一件商品了,此时有100个人同时购买这件商品,请问该怎么设计?谢谢!
秒杀和高并发是一同出现的。
首先产品为了保证数据的安全性,稳定性,一致性都会放在数据库(这里指的是传统数据库:mysql,oracle等)。
高并发会产生锁竞争,首先锁竞争产生的必然问题就是等待,首先等待是必须的,其次高并发的锁竞争可能造成死锁或者数据库直接挂掉,而且在整个过程中无论哪种情况,相对用户的响应都是很长。
一般设计者会在中间加入队列,一般采用redis或者memcache,由于是内存数据库,速度不是一般快。而且通过队列可以降低对数据库的操作。
用队列把并行处理成串行,是比较优雅的方案。
并发不是太高的话,也可以用mysql来抗住并发,下面是伪代码
update goods set goods_number = goods_number - 1 where goods_number > 0;再加上事务处理