我最近在開發(fā)項(xiàng)目時,遇到一個場景,我完成商品的售賣后需要減掉數(shù)據(jù)庫對應(yīng)的值越除。
像這種業(yè)務(wù)場景可能會很危險敞临,因?yàn)殡娚唐脚_更新商品庫存的并發(fā)量高态辛,并發(fā)更新可能會導(dǎo)致數(shù)據(jù)不一致的問題,例如:丟失修改挺尿,不可重復(fù)讀奏黑,讀“臟”數(shù)據(jù)。
可以上鎖來解決上面業(yè)務(wù)場景面臨的問題编矾。
悲觀鎖
假設(shè)并發(fā)訪問情況下熟史,數(shù)據(jù)很有可能被其他事務(wù)修改,因此在訪問數(shù)據(jù)時窄俏,直接鎖住數(shù)據(jù)蹂匹,防止其他事務(wù)對其進(jìn)行修改。
悲觀鎖也會面臨一個問題凹蜈,因?yàn)殒i數(shù)據(jù)的特性限寞,可能會引發(fā)死鎖。
死鎖
樂觀鎖
相對而言樂觀鎖就顯得溫柔許多踪区,它類似于公共衛(wèi)生間收拾衛(wèi)生的阿姨昆烁,在訪問衛(wèi)生間的時候,不會直接進(jìn)去收拾衛(wèi)生缎岗。而是會敲門判斷里面是否有人静尼,如果沒人阿姨會進(jìn)去收拾,但有人的話阿姨會回滾事務(wù),并嘗試重新進(jìn)去收拾衛(wèi)生鼠渺。