灰寨小學的python---小陳
阿新 • • 發佈:2018-12-30
悲觀鎖:不相信其他人不會修改,傳統的關係型資料庫裡邊就用到了很多這種鎖機制,如mysql, 每次查詢、修改資料操作之前就會上鎖,整個資料處理過程中,將資料處於鎖定狀態,自己更新資料後再釋放鎖,可以有效防止庫存衝突問題
樂觀鎖:相信其他人不會修改,所以查詢、修改資料庫時不會上鎖,所以再資料進行提交更新的時候,才會正式對資料的衝突與否進行檢測,如果發現衝突了,則返回錯誤的資訊,讓使用者決定如何 去做
樂觀鎖作用舉例:
-
電商網站庫存,當多使用者併發修改同一條記錄時,可定是後提交的使用者將覆蓋前者提交的結果,這個時候,可以使用加樂觀鎖的機制去解決高併發的問題
-
Reids 的併發競爭問題解決方案,使用樂觀鎖方式進行解決,成本低,非阻塞,效能較高、
樂觀鎖的業務流程
-
事務開始
-
查詢、修改資料表
-
對資料庫 操作
-
-
事務提交 釋放鎖
-
優點與不足
-
在資料提交的時候才去鎖定,所以不會產生任何的鎖和死鎖,
-
讀取出資料時,將此版本號一同讀出,之後更新時,對此版本號加一。此時,將提交資料的版本資料與資料庫表對應記錄的當前版本資訊進行比對,如果提交的資料版本號大於資料庫表當前版本號,則予以更新,否則認為是過期資料。
-
當兩個不同的事務同時讀取到一條資料並進行修改時,就會報錯,解決方案,儘量從業務方面減小事務塊,事務塊越大,由樂觀鎖引起的問題的概率就越大
-
悲觀鎖的業務流程
-
事務開始
-
查詢、修改資料表之前 加鎖
-
對資料庫 操作
-
-
事務提交(檢測、返回衝突)
-
優點與不足
-
-
先取鎖再訪問 為資料處理的安全性提供了保證
-
效率方面,讓資料庫產生了額外的開銷 ,增加了死鎖的機會
-
對於只讀事務處理,不會產生併發衝突,加悲觀鎖,指揮增加系統的負載,降低了並行性
-