1. 程式人生 > 實用技巧 >php使用redis watch秒殺搶購

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; }