redis 队列简单实现高并发抢购/秒杀
2019-03-21 14:34
阅读数 82
前提为每人限购1件
<>开抢前
把秒杀商品库存存进 Redis 队列中
$redis = new redis(); $redis->connect('127.0.0.1', 6379); //库存 $num = 10;
//往队列 goods_store 插入商品, 队列的长度为库存 for($i=0;$ilpush(
'goods_store', 1);
<>开抢中
方法1
前端: 用户点击购买按钮进行form表单提交
后端: 执行下面代码
//用户等待队列 $wait_key = "user_wait"; //库存队列 $store_key = "goods_store"; //根据Redis
hash特性, 设置成功返回1, 旧值被覆盖则返回0, 用来控制同一用户多买现象 $result = $redis->hset($wait_key,
$user_id, $user_id); if($result){ $count = $redis->lpop($store_key); if(!$count)
return '已经抢光了'; //下单流程, 数据库入库等操作 //下单失败或报错则执行 $redis->hdel($wait_key,
$user_id); 和加库存 $redis->lpush('goods_store', 1); 并跳转回上一页提示下单失败 ......
//下单成功则跳转到相应页面 return '抢购成功'; }
问题: 高并发