在論壇上看到好多人說(shuō)先刪除緩存在更新數(shù)據(jù)庫(kù),這種邏輯是錯(cuò)誤的,
第一種情況先刪緩存在刪數(shù)據(jù)庫(kù):在多線程環(huán)境下,當(dāng)一個(gè)線程把緩存刪掉之后,另一個(gè)線程都緩存,都不到緩存就會(huì)直接讀庫(kù),讀到數(shù)據(jù)后就會(huì)更新緩存,先前的線程呢,才更新數(shù)據(jù)庫(kù),會(huì)造成緩存臟讀的情況,很容易產(chǎn)生緩存臟讀。
第二種情況先刪數(shù)據(jù)庫(kù)再刪緩存,在多線程情況下,當(dāng)一個(gè)線程刪除數(shù)據(jù)庫(kù),另一個(gè)線程讀取緩存數(shù)據(jù),讀到的是緩存的數(shù)據(jù),當(dāng)先前一個(gè)線程刪完數(shù)據(jù)庫(kù)后就會(huì)更新緩存,這是緩存就正常了,產(chǎn)生了一次臟讀。
第一種和第二種對(duì)比
1.第一種產(chǎn)生了長(zhǎng)時(shí)間的臟讀,第二種只有很短時(shí)間的臟讀
2.第一種刪除緩存后會(huì)造成緩存擊穿,如果大量線程訪問(wèn)就會(huì)中造成數(shù)據(jù)庫(kù)壓力過(guò)大,第二種其他線程會(huì)讀取緩存數(shù)據(jù),不會(huì)對(duì)數(shù)據(jù)庫(kù)造成很大壓力,更新數(shù)據(jù)庫(kù)后緩存馬上就更新了。
聯(lián)系客服