详情请点击
https://blog.csdn.net/mu_rain/article/details/80249010
例用redis 队列pop 的原子性来做秒杀。(队列长度与商品库存量同步)
$uid = rand(1,10);
$amount = rand(1,5);
$goods_id = rand(1,6);
$time = time();
//用redis 校验,此次用户是否可以买。(库存是否充足)
$redis = self::createRedisObj();
$redis_key = "goods_".$goods_id;
$len = $redis->lLen($redis_key); //求队列的长度,也就是商品的库存。
if( $len == 0 ){ exit("抢光了!"); }
else if( $len < $amount){ exit("库存不足!"); }
//验证通过,开始pop 出队列。 pop 一个,相当于买一个。
for( $i =0 ; $i< $amount;$i++){
$redis->rPop( $redis_key );
}
$bool = $this->buy($uid , $goods_id , $amount);
if( !$bool ) { //如果购买失败,则把取出的redis 队列的数据,再压回去。(回充库存)
for( $i =0 ; $i< $amount;$i++){
$redis->lPush( $redis_key , 1);
}
}