樂觀鎖是在應用層加鎖,而悲觀鎖是在數據庫層加鎖(for update)
樂觀鎖顧名思義就是在操作時很樂觀,這數據只有我在用,我先盡管用,最后發現不行時就回滾。
悲觀鎖在操作時很悲觀,生怕數據被其他人更新掉,我就先將其先鎖住,讓別人用不了,我操作完成后再釋放掉。
悲觀鎖需要數據庫級別上的的實現,程序中是做不到的,如果在長事務環境中,數據會一直被鎖住,導致並發性能大大地降低。
一般來說如果並發量很高的話,建議使用悲觀鎖,否則的話就使用樂觀鎖。
如果並發量很高時使用樂觀鎖的話,會導致很多的並發事務回滾、操作失敗。
總之,沖突幾率大用悲觀,小就用樂觀。