樂觀鎖與悲觀鎖
北京這兩天天氣不好,時晴時陰,最近有有點累,所以在家裡休息了兩天,看了一下樂觀鎖與悲觀鎖,雖然沒有茅塞頓開,但是也有點收穫。
先想一想為什麼要使用鎖?
在使用者訪問你的**時,同一時間可能會有多個使用者更新相同的記錄,這時候他們同時訪問資料庫,這就會產生衝突,這就是著名的併發(高併發)。
高併發會產生什麼後果呢?
丟失更新:乙個事務的更新覆蓋了其他事務的更新,這就是所謂的更新丟失。列如管理員a把資料庫中的2改成了6,管理員b把值從6又改成了2,這個時候,使用者a就丟失了他的更新。
髒讀:當乙個事務讀取其他完成一半事務的記錄時,就會發生髒讀,列如:管理員ab讀取資料庫時看到的都是6 ,使用者b把值改為2,使用者a讀取到的值仍是6 .
超賣:如果maysql中沒有鎖的存在的話,他會產生超賣的情況,你庫存只有十個,但是一百個使用者同時去訪問你的資料庫,這時候就會產生超賣。可能你就會賣出12件商品。
解決高併發的方法:
總結::在實際生產環境裡邊,如果併發量不大且不允許髒讀,可以使用悲觀鎖解決併發問題;但如果系統的併發非常大的話,悲觀鎖定會帶來非常大的效能問題,所以我們就要選擇樂觀鎖定的方法.
悲觀鎖與樂觀鎖
悲觀鎖與樂觀鎖 悲觀鎖 pessimistic locking 顧名思義就是採用一種悲觀的態度來對待事務併發問題,我們認為系統中的併發更新會非常頻繁,並且事務失敗 了以後重來的開銷很大,這樣以來,我們就需要採用真正意義上的鎖來進行實現。悲觀鎖的基本思想就是每次一 個事務讀取某一條記錄後,就會把這條記...
樂觀鎖與悲觀鎖
悲觀鎖 pessimistic locking 顧名思義就是採用一種悲觀的態度來對待事務併發問題,我們認為系統中的併發更新會非常頻繁,並且事務失敗了以後重來的開銷很大,這樣以來,我們就需要採用真正意義上的鎖來進行實現。悲觀鎖的基本思想就是每次乙個事務讀取某一條記錄後,就會把這條記錄鎖住,這樣 其它的...
樂觀鎖與悲觀鎖
鎖 locking 這個概念在我們學習多執行緒的時候曾經接觸過,其實這裡的鎖和多執行緒裡面處理併發的鎖是乙個道理,都是暴力的把資源歸為自己所有。這裡我們用到鎖的目的就是通過一些機制來保證一些資料在某個操作過程中不會被外界修改,這樣的機制,在這裡,也就是所謂的 鎖 即給我們選定的目標資料上鎖,使其無法...