中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

使用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

六枝特区| 津南区| 古田县| 大冶市| 上饶市| 太和县| 长子县| 合作市| 衡阳县| 平乡县| 丰城市| 广昌县| 玉溪市| 迁安市| 吉安市| 阳朔县| 墨玉县| 文安县| 漳浦县| 瑞金市| 汝南县| 新安县| 竹山县| 武宁县| 涟水县| 乌拉特前旗| 桐城市| 平潭县| 海兴县| 青川县| 星子县| 太保市| 阳春市| 邢台市| 河南省| 阳原县| 化州市| 丰镇市| 邹平县| 措美县| 柳河县|