php使用redis watch秒殺搶購


 redis的watch multi exec 方法實現秒殺搶購。優點:使用了樂觀鎖沒有鎖的等待,比隊列方式減少了大量的內存消耗。
 watch 監視一個或多個key,如果在事務執行之前這個(或這些)key被其他命令所改動,那么事務將被打斷.
$redis = new redis();
$result = $redis->connect('127.0.0.1',6379);
$getnum = $redis->get('getnum');//已搶數量
$num = 100;//搶購總數量
if($getnum < $num){
    $redis->watch('getnum');//監聽key
    $redis->multi();//開啟事務
    //插入搶購數據
    $redis->hSet("userList",'user_id_'.mt_rand(1,999),time());
    $redis->set("getnum",$getnum+1);//搶購到+1
    $robResult = $redis->exec();//執行事務
        if ($robResult) {
        echo "搶購成功!<br/>";
        echo "剩余數量:" . ($num - ($redis->get("getnum"))) . "<br/>";
        echo "用戶列表:<pre>";
        var_dump($redis->hGetAll("userList"));
    } else {
        echo "手氣不好,再搶購!";
        exit;
    }

}else{
     echo "已售罄";
     exit;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM