原視頻:https://www.bilibili.com/video/BV1Km4y1r75f?p=62&vd_source=fa75329ae3880aa55609265a0e9f5d34
由于緩存和數(shù)據(jù)庫(kù)是分開(kāi)的,無(wú)法做到原子性的同時(shí)進(jìn)行數(shù)據(jù)修改,可能出現(xiàn)緩存更新失敗,或者數(shù)據(jù)庫(kù)更新失敗的情況,這時(shí)候會(huì)出現(xiàn)數(shù)據(jù)不一致,影響前端業(yè)務(wù)
- 先更新數(shù)據(jù)庫(kù),再更新緩存。緩存可能更新失敗,讀到老數(shù)據(jù)
- 先刪緩存,再更新數(shù)據(jù)庫(kù)。并發(fā)時(shí),讀操作可能還是會(huì)將舊數(shù)據(jù)讀回緩存.先更新數(shù)據(jù)庫(kù),再刪緩存。也存在緩存刪除失敗的可能
最經(jīng)典的緩存+數(shù)據(jù)庫(kù)讀寫(xiě)模式- Cache Aside Pattern :
讀的時(shí)候,先讀緩存,緩存沒(méi)有的話,就讀數(shù)據(jù)庫(kù),然后取出數(shù)據(jù)后放入緩存,同時(shí)返回響應(yīng)。更新的時(shí)候,先更新數(shù)據(jù)庫(kù),然后再刪除緩存。
為什么是刪除緩存而不是更新緩存?
因?yàn)閯h除更加輕量,時(shí)延遲加載的一種實(shí)現(xiàn),更新可能涉及多個(gè)表、比較耗時(shí)
更優(yōu)的方案:延時(shí)雙刪:
先刪除緩存,再更新數(shù)據(jù)庫(kù),休眠1s、再次刪除緩存。寫(xiě)數(shù)據(jù)的休眠時(shí)間則在讀數(shù)據(jù)業(yè)務(wù)邏輯的耗時(shí)基礎(chǔ)上,加幾百 ms 即可。這么做的目的,就是確保讀請(qǐng)求結(jié)束,寫(xiě)請(qǐng)求可以刪除讀請(qǐng)求造成的緩存臟數(shù)據(jù),并發(fā)還是可能讀到舊值覆蓋緩存
終極方案:
將訪問(wèn)操作串行化
1.先刪除緩存,將更新操作放入一個(gè)有序隊(duì)列中
2.從緩存查不到的查詢(xún)操作,都進(jìn)入有序隊(duì)列
會(huì)面臨的問(wèn)題:
1、讀請(qǐng)求擠壓,大量超市,導(dǎo)致數(shù)據(jù)庫(kù)的壓力
2. 如何避免大量請(qǐng)求擠壓:將隊(duì)列水平拆分,提高并行度,不同的業(yè)務(wù)使用不同的隊(duì)列
3. 保證相同請(qǐng)求路由正確文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-448531.html
redis實(shí)戰(zhàn)課:
https://www.bilibili.com/video/BV1cr4y1671t/?spm_id_from=333.999.0.0&vd_source=fa75329ae3880aa55609265a0e9f5d34
http://yun.itheima.com/course/806.html?capid=2文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-448531.html
到了這里,關(guān)于redis面試題目-如何保證數(shù)據(jù)庫(kù)與緩存的數(shù)據(jù)一致性的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!