怎么处理高并发秒杀商品?

怎么处理高并发秒杀商品?比如只剩一件商品了,此时有100个人同时购买这件商品,请问该怎么设计?谢谢!

阅读 6.5k
4 个回答

用队列把并行处理成串行,是比较优雅的方案。
并发不是太高的话,也可以用mysql来抗住并发,下面是伪代码
update goods set goods_number = goods_number - 1 where goods_number > 0;
再加上事务处理

秒杀服务器最好单独搞一台,秒杀不用实时性高,可以把下单推入redis队列中,用个守护进程再去处理队列,这样就很好的避免了并发

如上面楼主回答,然后队列中第一个人命中后,计入redis中一个key,然后队列中其他的人,检查key,直接返回

秒杀和高并发是一同出现的。

首先产品为了保证数据的安全性,稳定性,一致性都会放在数据库(这里指的是传统数据库:mysql,oracle等)。
高并发会产生锁竞争,首先锁竞争产生的必然问题就是等待,首先等待是必须的,其次高并发的锁竞争可能造成死锁或者数据库直接挂掉,而且在整个过程中无论哪种情况,相对用户的响应都是很长。

一般设计者会在中间加入队列,一般采用redis或者memcache,由于是内存数据库,速度不是一般快。而且通过队列可以降低对数据库的操作。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进