91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用thinkPHP框架怎么實現樂觀鎖和悲觀鎖

發布時間:2021-04-13 16:19:19 來源:億速云 閱讀:385 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關使用thinkPHP框架怎么實現樂觀鎖和悲觀鎖,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

樂觀鎖:

例子對于一個正在出售的火爆商品,同一個時間,同時有10個人同時發起了10個線程來購買,10個線程讀取到數據庫的庫存有20件和version為9。

那么樂觀鎖讀取num數量和version版本兩個字段,在更新的結果時候,我們就要更新條件where version=9這條語句,具體UPDATE goods SET num=num-1,version=version+1 WHERE version=9 and id=1,這樣的話,如果其中一條執行成功后,數據庫中version的值為10了,所以剩下的9個人線程都會失敗了。

$result = $this->mysqli->query("SELECT num,version FROM goods WHERE id=1 LIMIT 1");
$row = $result->fetch_assoc();
$num = intval($row['num']);
$version = intval($row['version']);
if($num > 0){
  usleep(100);
  $this->mysqli->begin_transaction();
  $this->mysqli->query("UPDATE goods SET num=num-1,version=version+1 WHERE version={$version} and id=1");
  $affected_rows = $this->mysqli->affected_rows;
  if($affected_rows == 1){
    $this->mysqli->query("INSERT INTO log(good_id) VALUES({$num})");
    $affected_rows = $this->mysqli->affected_rows;
    if($affected_rows == 1){
      $this->mysqli->commit();
      echo "success:".$num;
    }else{
      $this->mysqli->rollback();
      echo "fail1:".$num;
    }
  }else{
    $this->mysqli->rollback();
    echo "fail2:".$num;
  }
}else{
  echo "fail3:".$num;
}

樂觀鎖缺點:

  • 比如可能別人先購買的,反而后面的先買到了,這就點不太合理

樂觀鎖優點:

  • 這可以避免超發的現象發生

悲觀鎖mysql代碼:

#主要對所在行進行for update
select * from employee where id = 1 for update; 
update employee set money = 0 + 1 where id = 1;

看完上述內容,你們對使用thinkPHP框架怎么實現樂觀鎖和悲觀鎖有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

扎囊县| 应城市| 元氏县| 常德市| 宜城市| 鹿邑县| 和顺县| 昭苏县| 若尔盖县| 柘城县| 霍林郭勒市| 裕民县| 望江县| 西林县| 巴彦淖尔市| 万州区| 淮南市| 广丰县| 武穴市| 雅江县| 开阳县| 南木林县| 报价| 浑源县| 巍山| 札达县| 金沙县| 东安县| 莱芜市| 延津县| 瓦房店市| 邯郸市| 临沧市| 孝昌县| 阿尔山市| 开鲁县| 梁平县| 宁阳县| 且末县| 大田县| 唐海县|