<?php $error_level = error_reporting(0); $con = new mysqli('localhost','root','root','test'); if(!$con){ echo "數據庫連接失敗"; } $sql = "select * from products where id=1"; $result = mysqli_query($con,$sql); $aa= mysqli_fetch_row($result); if($aa[3]>0){ sleep(1); $sql = "update products set store=store-1 where id=1"; if(mysqli_query($con,$sql)){ echo "更新成功"; } }else{ echo "沒有庫存"; }
redis樂觀鎖防止超賣
<?php // ini_set('default_socket_timeout', -1); $redis =new Redis(); $redis->connect("127.0.0.1", 6379); $redis->watch('sales');//樂觀鎖 監視作用 set() 初始值0 $sales=$redis->get('sales'); $n=100; if($sales>=$n){ exit('秒殺結束'); } //開啟事務 $redis->multi(); $redis->incr('sales'); //將 key 中儲存的數字值增一 ,如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執行 INCR 操作。 $res=$redis->exec(); //成功1 失敗0 if($res){ //秒殺成功 include 'db.php'; $sql="update products set store=store-1 where id=1"; if($mod->exec($sql)){ echo "秒殺完成"; } }else{ exit('搶購失敗'); }