$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"
}
已抢光!
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。