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;
}