多用戶同時操作一條Mysql記錄問題


場景:兩個用戶同時讀取了數據庫中的一條記錄,此時用戶A對其中一個字段的值進行了修改操作並進行了提交,后來用戶B也對這個字段進行了修改,用戶B的提交將會覆蓋用戶A提交的值

 

關於樂觀鎖悲觀鎖

悲觀鎖:每次去取數據,很悲觀,都覺得會被別人修改,所以在拿數據的時候都會上鎖。

簡言之,共享資源每次都只給一個線程使用,其他線程阻塞,等第一個線程用完后再把資源轉讓給其他線程。

synchronized和ReentranLock等都是悲觀鎖思想的體現。 

樂觀鎖:每次去取數據,都很樂觀,覺得不會被被人修改。

因此每次都不上鎖,但是在更新的時候,就會看別人有沒有在這期間去更新這個數據,如果有更新就重新獲取,再進行判斷,一直循環,直到拿到沒有被修改過的數據。

CAS(Compare and Swap 比較並交換)就是樂觀鎖的一種實現方式,比如使用version字段或者修改時間字段來判斷數據是都被修改

 

參考

Mysql 事務及數據的一致性處理

https://segmentfault.com/a/1190000012469586

 CAS(比較並交換)樂觀鎖解決並發問題的一次實踐

https://www.javazhiyin.com/41189.html

樂觀鎖與悲觀鎖——解決並發問題

https://www.cnblogs.com/0201zcr/p/4782283.html

Spring Boot之樂觀鎖和悲觀鎖

https://blog.csdn.net/qq_42914528/article/details/82148056


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM