日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

悲观锁,乐观锁

發布時間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 悲观锁,乐观锁 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

樂觀鎖與悲觀鎖

北京這兩天天氣不好,時晴時陰,最近有有點累,所以在家里休息了兩天,看了一下樂觀鎖與悲觀鎖,雖然沒有茅塞頓開,但是也有點收獲。

先想一想為什么要使用鎖?

在用戶訪問你的網站時,同一時間可能會有多個用戶更新相同的記錄,這時候他們同時訪問數據庫,這就會產生沖突,這就是著名的并發(高并發)。

高并發會產生什么后果呢?

丟失更新:一個事務的更新覆蓋了其他事務的更新,這就是所謂的更新丟失。列如管理員A把數據庫中的2改成了6,管理員B把值從6又改成了2,這個時候,用戶A就丟失了他的更新。

臟讀 :當一個事務讀取其他完成一半事務的記錄時,就會發生臟讀,列如:管理員AB讀取數據庫時看到的都是6 ,用戶B把值改為2,用戶A讀取到的值仍是6 .

超賣: 如果maysql中沒有鎖的存在的話,他會產生超賣的情況,你庫存只有十個,但是一百個用戶同時去訪問你的數據庫,這時候就會產生超賣。可能你就會賣出12件商品。

解決高并發的方法:

  • 悲觀鎖: 假設會發生并發沖突,屏蔽一切可能違反數據完整性的操作, 認為會多人操作同一條數據,因此操作數據時直接把數據鎖住,直到一個人操作完成后才會釋放鎖;上鎖期間其他人不能修改數據。
  • 樂觀鎖: 假設不會發生并發沖突,只在操作時檢查是否違反數據完整性,如果別人修改了數據則放棄操作,否則執行操作。而樂觀鎖不能解決臟讀,因為他在操作時才會去檢查,而臟讀是在操作中產生的。
  • 版本號機制:??MySql最經常使用的樂觀鎖時進行版本控制,也就是在數據庫表中增加一列,記為version,當我們將數據讀出時,將版本號一并讀出,當數據進行更新時,會對這個版本號進行加1,當我們提交數據時,會判斷數據庫表中當前的version列值和當時讀出的version是否相同,若相同說明沒有進行更新的操作,不然,則取消這次的操作

總結::在實際生產環境里邊,如果并發量不大且不允許臟讀,可以使用悲觀鎖解決并發問題;但如果系統的并發非常大的話,悲觀鎖定會帶來非常大的性能問題,所以我們就要選擇樂觀鎖定的方法.

轉載于:https://www.cnblogs.com/lowbi/p/11022610.html

總結

以上是生活随笔為你收集整理的悲观锁,乐观锁的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。