我们模拟10w个人一瞬间涌入页面进行秒杀,能够秒杀成功的只有10人。我们把先进来的用户放入redis队列中,当队列中的用户达到10人时,后面的用户跳转到秒杀结束页面。这里用随机数来表示不同的用户。
header("Content-type:text/html;charset=utf-8");
$redis = new Redis();
$redis->connect("localhost", "6379");
$redis->select(1);
$redis_name = "miaosha";
$num = 10;//表示会有10人秒杀成功
$i = 100000;//模拟10w人瞬间过来访问时
$n = 0;//用来验证程序执行时数据量是否正确
while ($i--) {
$n++;
$uid = mt_rand(100000, 999999);
if ($redis->llen($redis_name) < $num) {
$redis->rpush($redis_name, $uid);
echo $uid . "秒杀成功" . $n . "<br>";
} else {
echo $uid . "秒杀已经结束" . $n . "<br>";
}
}
$redis->close();
由上图我们可以看出,秒杀成功的第一个用户的id是813696,秒杀成功的最后一个用户是909772;参与秒杀人数总共是10w。
从队列中把秒杀成功的10个用户取出来,观察第一个用户和最后一个用户是否跟之前的记录值一样。
header("Content-type:text/html;charset=utf-8");
$redis = new Redis();
$redis->connect("localhost", "6379");
$redis->select(1);
$redis_name = "miaosha";
while ($redis->llen($redis_name) > 0) {
$str = $redis->lpop($redis_name);
echo $uid . "秒杀成功用户" . $str . "<br>";
}
$redis->close();
由上图我们可以看出,秒杀成功的第一个用户的id是813696,秒杀成功的最后一个用户是909772;可以看出结果是很准确的。