关于redis处理超卖的问题,求教

浏览:433 发布日期:2019/04/13 分类:求助交流 关键字: redis 超卖 高并发
$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"
}
已抢光!
最佳答案
评论( 相关
后面还有条评论,点击查看>>