悲觀鎖和樂觀鎖是兩種併發控制方式。
悲觀鎖:在整個資料處理中,將資料鎖定。往往依靠資料庫提供的鎖機制。
資料庫的事務隔離級別:
1. read uncommited
2. read commited
3. repeatable read( innodb 預設為 repeatable read, 由於使用了 next-key lock,相當於 serializable )
4. serializable
共享鎖:其他事務可以讀,但不能修改。
排它鎖:其他事務不可以讀,不可以寫。
鎖粒度:行鎖、表鎖、庫鎖。
innodb 支援事務,acid,行鎖,預設事務隔離級別為 repeatable read(使用了 next-key locking, 避免了幻讀,實際上與 serializable 等價)。
myisam 是表鎖。
悲觀鎖:
select ... for update,加x鎖,可以進行一致性鎖定讀。
select ... lock in share mode, 加s鎖。
( 如果是普通的 select,innodb 採用快照讀 -一致性非鎖定讀mvcc );
樂觀鎖:version 字段(aba問題)。
悲觀鎖:synchronized, lock;
樂觀鎖:原子類(cas實現,若失敗則重試)
悲觀鎖與樂觀鎖
悲觀鎖與樂觀鎖 悲觀鎖 pessimistic locking 顧名思義就是採用一種悲觀的態度來對待事務併發問題,我們認為系統中的併發更新會非常頻繁,並且事務失敗 了以後重來的開銷很大,這樣以來,我們就需要採用真正意義上的鎖來進行實現。悲觀鎖的基本思想就是每次一 個事務讀取某一條記錄後,就會把這條記...
樂觀鎖與悲觀鎖
悲觀鎖 pessimistic locking 顧名思義就是採用一種悲觀的態度來對待事務併發問題,我們認為系統中的併發更新會非常頻繁,並且事務失敗了以後重來的開銷很大,這樣以來,我們就需要採用真正意義上的鎖來進行實現。悲觀鎖的基本思想就是每次乙個事務讀取某一條記錄後,就會把這條記錄鎖住,這樣 其它的...
樂觀鎖與悲觀鎖
鎖 locking 這個概念在我們學習多執行緒的時候曾經接觸過,其實這裡的鎖和多執行緒裡面處理併發的鎖是乙個道理,都是暴力的把資源歸為自己所有。這裡我們用到鎖的目的就是通過一些機制來保證一些資料在某個操作過程中不會被外界修改,這樣的機制,在這裡,也就是所謂的 鎖 即給我們選定的目標資料上鎖,使其無法...