在sql中,當對資料庫中的乙個表進行併發操作時,會出現 資料丟失、不可重複讀、髒讀和幻影讀的情況。
處理該併發問題的解決方法:
1 封鎖:
1.1 共享鎖(又稱讀鎖,如果事務a1用共享鎖讀取資料b,a1事務沒有結束,那麼事務a2在a1事務期間,可以 用共享 鎖來讀取資料,但不能用排它鎖來修改資料。)
1.2 排它鎖:(又稱寫鎖,如果事務a1用排它鎖來運算元據b,那麼只能是事務a1來對資料b進行讀寫操作,其它事務不可以對資料b進行任何操作。)
2 封鎖協議:
具體分為1,2,3個級別(具體作用是對鎖的做出的限制規則,這裡不作討論)。
3 事務隔離級別:
sql主要通過事務隔離級別在後台自動進行鎖的操作,來解決併發操作一致性的問題。具體分類如下:
3.1 readuncommitted:相當於nolock,併發操作會出現 資料丟失、不可重複讀、髒讀和幻影讀的情況。
3.2 readcommitted:sql資料庫預設的事務隔離級別。
在對資料進行讀的時候,用共享鎖(有效時間,讀取時間);
在對資料進行修改操作時用排它鎖(有效時間,事務時間),在事務級別是readcommitted級別並對資料進行修改時,其它事務是不能對資料進行任何讀寫操作的。
在這種級別下併發操作不會出現資料丟失和髒讀的情況,但會出現不可重複讀和幻影讀的情況。
3.3 repeatableread:可重複讀,有效期間在事務執行期間。在事務a讀取資料,其它事務不可以修改資料(插入除外)
在這種級別下併發操作不會出現資料丟失,髒讀,不可重複讀的情況;但是,還會出現幻影讀的情況。
3.4 serializable:a1事務讀取執行期間,其它事務部可以對事物進行任何操作。
在這種級別下併發操作不會出現資料丟失,髒讀,不可重複讀和幻影讀的情況。
參考引用:http://www.cnblogs.com/zhenyulu/articles/330494.html 很經典
強一致性 弱一致性 最終一致性
這種方式在es等分布式系統中也有體現,可以設定主shard提交即返回成功,或者需要replica shard提交成功再返回。提到分布式架構就一定繞不開 一致性 問題,而 一致性 其實又包含了資料一致性和事務一致性兩種情況,本文主要討論資料一致性 事務一致性指acid 複製是導致出現資料一致性問題的唯...
快取一致性解決
根據上一章的學習,我們現在就可以用redisson框架來解決分布式鎖的問題,進行修改獲取 二級分類 如下 todo 產生堆外記憶體溢位異常 outofdirectmemoryeror override public map getcatalogjson map result json.parseob...
Java併發 快取一致性
cpu的時鐘頻率非常的快,跑起來的速度遠遠超過了記憶體 硬碟。碼農翻身 形象的比喻cpu為阿甘,跑的速度是記憶體的100倍,硬碟的1000多萬倍。如果直接靠cpu直接和記憶體打交道,那麼cpu要等待太久,浪費資源。我們平時編寫的程式中,包含著很多連續建立的陣列 物件,各種迴圈 遞迴 呼叫同一函式等,...