简单的PHP+Redis实现秒杀
public function kill() { //假装是用户的唯一标识 $uuid = md5(uniqid('user') . time()); $orderKey = "2020_03_31_user_list";//订单队列 $listKey = '2020_03_31_goods_list';//剩余商品队列 $failUserNum = "2020_03_31_fail_user_num";//失败人数 $successUserNum = "2020_03_31_success_user_list";//成功用户队列 $r = doWithRedis(function (Redis $redis) use ($listKey, $orderKey, $failUserNum, $successUserNum, $uuid) { if ($goodsId = $redis->lPop($listKey)) {//秒杀成功 //生成订单 //库存减一 //判断用户是否意在成功队列 if ($redis->zRank($successUserNum, $goodsId, $uuid)) {//已经在成功队列 return '已经在购买队列'; } else {////将幸运用户存在集合中 $redis->zAdd($successUserNum, $goodsId, $uuid); } $redis->hSet($orderKey, $goodsId, $uuid); } else { //秒杀失败 //将失败用户计数 $redis->incr($failUserNum); } }); echo "SUCCESS"; return $r; }