# 鎖跟DB 相關 https://www.gushiciku.cn/pl/gKzx/zh-tw ## mvcc跟lock  讀 不用lock 讀+判斷 需要共享lock 不讓別人改 讀+寫 一定要確保寫入的是正確的 所以要悲觀 ## 鎖 https://ithelp.ithome.com.tw/articles/10320923 ## 共享  ## 基本差異 Cache鎖 鎖service cache BD不是鎖 是git 的紀錄 DB裡面的行鎖才是鎖 ## 樂觀鎖 樂觀鎖之所以叫樂觀,是因為這個模式不會對資料加鎖。而是對資料操作保持一種樂觀的心態,認為不會產生併發操作問題(即不會有其他執行緒同時對資料進行修改) 樂觀鎖查詢資料時直接進行查詢,更新時會判斷其他執行緒有沒有對資料進行修改,如果沒有則進行更新,反之則拒絕更新。 樂觀鎖最常用資料版本(Version)的記錄機制實現。即為資料增加一個版本標識,一般是通過為資料庫表增加一個數字型別的 “version” 欄位來實現。當讀取資料時,將version欄位的值一同讀出,資料每更新一次,對此version值加1。 當我們提交更新的時候,判斷資料庫表對應記錄的當前版本資訊與第一次取出來的version值進行比對,如果資料庫表當前版本號與第一次取出來的version值相等,則予以更新,否則認為是過期資料 ## 悲觀鎖 悲觀鎖就比較狠了,悲觀鎖對資料做“有罪推定”。即在操作資料時,預設此操作會出現資料衝突,所以在進行每次操作時都要加鎖才能進行對相同資料的操作。 一旦加鎖,不同執行緒同時執行時,只能有一個執行緒執行,其他的執行緒在入口處等待,直到鎖被釋放。 悲觀鎖可以由資料庫語句實現,分為**共享鎖**和**排它鎖**。 ## 共享鎖 (lock in share mode) 共享鎖又稱讀鎖 (read lock),是讀取操作建立的鎖。其他使用者可以併發讀取資料,但任何事務都不能對資料進行修改(獲取資料上的排他鎖),直到已釋放所有共享鎖。如果事務對讀鎖進行修改操作,很可能會造成死鎖 ## 排它鎖 (for update) 排他鎖又稱寫鎖(exclusive lock or writer lock)。若某個事務對某一行加上了排他鎖,只能這個事務對其進行讀寫,在此事務結束之前,其他事務不能對其進行加任何鎖,其他程序可以讀取,不能進行寫操作,需等待其釋放。排它鎖會阻塞所有的排它鎖和共享鎖。 ## 分布式鎖 需要保证一个方法在同一时间内只能被同一个线程执行 https://zhuanlan.zhihu.com/p/42056183 ###### tags: `觀念重點區`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up