电商中的秒杀是怎么实现的

什么是秒杀:秒杀是如今很常见的一个应用场景,在各大电商系统中都可以看见。那么我们就来说说什么是秒杀吧。

秒杀主要需要解决的问题有两个:

1 高并发对数据库产生的压力 。

对于第一个问题,已经很容易想到用缓存来处理抢购,避免直接操作数据库,例如使用 Redis。

2 竞争状态下如何解决库存的正确减少(”超卖”问题)。 

 第二个问题,我们可以使用 redis 队列来完成,把要秒杀的商品放入到队列中,因为 pop 操作是原子的,即使有很多用户同时到达,也是依次执行,文件锁和事务在高并发下性能下降很快,当然还要考虑其他方面的东西,比如抢购页面做成静态的,通过 ajax 调用接口,其中也可能会出现一个用户抢多次的情况,这时候需要再加上一个排队队列和抢购结果队列及库存队列。高并发情况下,将用户进入排队队列,用一个线程循环处理从排队队列取出一个用户,判断用户是否已在抢购结果队列,如果在,则已抢购,否则未抢购,库存减 1,写数据库,将用户入结果队列。

这就是关于秒杀的实现方法,如有问题请随时指教。谢谢!
 

 

你可能感兴趣的:(thinkPHP)