常见面试题,php 结合redis 秒杀。

mu_rain 2018-05-09 11:19:38
详情请点击 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);
}
}
...全文
1310 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
伟洪winni 2018-05-10
  • 打赏
  • 举报
回复
一生小白 2018-05-09
  • 打赏
  • 举报
回复
谢谢分享,学习了

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧