數(shù)據(jù)庫(kù)的樂(lè)觀鎖原理和實(shí)現(xiàn) 數(shù)據(jù)庫(kù)高并發(fā)下樂(lè)觀鎖的原理?
數(shù)據(jù)庫(kù)高并發(fā)下樂(lè)觀鎖的原理?在高并發(fā)的情況下,通常需要在選擇然后更新之后在業(yè)務(wù)層處理邏輯。如果兩個(gè)連接同時(shí)查詢(xún)相同的數(shù)據(jù),然后在進(jìn)行一些邏輯判斷或業(yè)務(wù)操作后執(zhí)行update,則結(jié)果可能與預(yù)期不一致。在
數(shù)據(jù)庫(kù)高并發(fā)下樂(lè)觀鎖的原理?
在高并發(fā)的情況下,通常需要在選擇然后更新之后在業(yè)務(wù)層處理邏輯。如果兩個(gè)連接同時(shí)查詢(xún)相同的數(shù)據(jù),然后在進(jìn)行一些邏輯判斷或業(yè)務(wù)操作后執(zhí)行update,則結(jié)果可能與預(yù)期不一致。在不使用悲觀鎖和復(fù)雜SQL的前提下,可以使用樂(lè)觀鎖來(lái)處理問(wèn)題,同時(shí)兼顧性能。場(chǎng)景模擬:每次使用ID時(shí),使用加一計(jì)數(shù)。當(dāng)useWhen count大于1000時(shí),不能使用ID(換句話(huà)說(shuō),從數(shù)據(jù)庫(kù)中找不到它)。從id=123456的表中選擇*并使用uCount
所謂的并發(fā)可以從它不是并行的概念中看出。從用戶(hù)的角度來(lái)看,有一種同時(shí)執(zhí)行的假象,但它在數(shù)據(jù)庫(kù)中確實(shí)是串行的,或者在某個(gè)粒度上是串行的。
以更新表中的一行數(shù)據(jù)為例,更新時(shí)會(huì)鎖定更改后的數(shù)據(jù)行,避免其他進(jìn)程訪(fǎng)問(wèn)該行,從而避免數(shù)據(jù)沖突。
此外,還有其他類(lèi)型的鎖,以適應(yīng)不同的場(chǎng)景。因此,在我們所謂的并發(fā)場(chǎng)景中,不存在數(shù)據(jù)問(wèn)題。