$rob_total = 8; //抢购数量
echo $mywatchkey = $redis->get("mywatchkey");
if($mywatchkey<$rob_total){
$redis->watch("mywatchkey");
$redis->multi(); //在当前连接上启动一个新的事务。
//插入抢购数据TODO
$redis->set("mywatchkey",$mywatchkey+1);
$rob_result = $redis->exec();
if($rob_result){
$redis->hSet("watchkeylist","user_".mt_rand(1, 9999),$mywatchkey);
$mywatchlist = $redis->hGetAll("watchkeylist");
echo "抢购成功!<br/>";
echo "剩余数量:".($rob_total-$mywatchkey-1)."<br/>";
echo "用户列表:<pre>";
var_dump($mywatchlist);
}else{
$redis->hSet("watchkeylist","user_".mt_rand(1, 9999),'--meiqiangdao--');
echo "手气不好,再抢购!";exit;
}
}else{
echo "已抢光!";exit;
}ab并发结果如下:array(9) {
["user_6224"]=>
string(1) "1"
["user_4898"]=>
string(1) "2"
["user_2206"]=>
string(1) "3"
["user_5945"]=>
string(1) "4"
["user_5662"]=>
string(1) "5"
["user_3527"]=>
string(1) "5"
["user_4002"]=>
string(1) "6"
["user_3960"]=>
string(1) "7"
["user_5218"]=>
string(1) "7"
}
已抢光! 最佳答案