高并发下的商城秒杀设计php+mysql+redis的实现

Posted 爱钓鱼的程序猫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高并发下的商城秒杀设计php+mysql+redis的实现相关的知识,希望对你有一定的参考价值。

<?php
/*
高并发的秒杀设计
php+mysql+redis
* Author: lms <php7在qq.com> QQ:二一九二4238
* 转发请注明来源网址http://www.thinkunion.net
https://blog.csdn.net/weixin_43932088


正常的操作:点击拍下,判断有没有库存,有则拍成功,然后减库存。
但是,在高并发的情况下,判断库存的这个时间间隔,会出现多人同时进入这个门,
然后库存并没有减,导致拍出的结果超过库存。

那么我们利用redis的原子性操作即可以解决这个问题。
lpush,lpop,incr,decr这些.
这里我用decr直接减库存,返回减去的结果。如果小于0则表示没库存了拍完了。


假设100部手机参于秒杀
 */

\\Redis::set('store',100); 

?>



<?php
/*--------点击抢购---------*/

$n=\\Redis::decr('store');
if($n<0)
    echo '已经抢光了';


//数据库库存减一操作
//输出成功页面




/*
如果限定一个人只能抢一部手机
我们是不是要先判断这个人是不是已经拍了。
那我们假设这个人用了软件高并发一起拍,还是会有多个同时进入这个判断的可能性。

这时我们可以这样操作:
需要两个队列,一个是排队队列queueuser,一个是结果队列orderuser。
把人先放入队列中排队,然后系统自己做一个循环去叫号,然后操作判断、减库存、成功则加入结果队列等等。

那么有人会说,既然系统自己做一个循环去操作阻止并发,
那我们前面那个其实也可以这么设计,确实没错,原理都是一样。
*/

 

以上是关于高并发下的商城秒杀设计php+mysql+redis的实现的主要内容,如果未能解决你的问题,请参考以下文章

php结合redis实现高并发下的抢购秒杀功能

php结合redis实现高并发下的抢购秒杀功能

php结合redis实现高并发下的抢购秒杀功能

php 结合redis实现高并发下的抢购秒杀功能

php结合redis实现高并发下的抢购秒杀功能

php结合redis实现高并发下的抢购秒杀功能