数据库和缓存一致性的问题
經(jīng)常看到有人問怎么解決數(shù)據(jù)庫和緩存一致性的問題,這個(gè)問題我覺得是不要去解決。
如果你不信你先看我列的幾種情況
?
假設(shè)
數(shù)據(jù)庫一開始和緩存都是1元。
用戶更新數(shù)據(jù)庫的同時(shí)雙寫緩存。
?
1.雙寫不刪
 寫庫充值10元>>>返回成功
 -----
 時(shí)間間隔
 <<<讀緩存 返回舊的1元 ? 這是錯(cuò)的
 時(shí)間間隔
 -----
 寫緩存充值10元>>>
 <<<讀緩存 返回新的10元 ? 這是對(duì)的
2.雙寫先刪緩存成功 ?【理想情況】
 <<<讀緩存 舊的1元 ?這是對(duì)的 因?yàn)檫€沒有寫
 寫庫充值10元>>>
 -----
 時(shí)間間隔
 <<<讀緩存 沒有數(shù)據(jù) 讀數(shù)據(jù)庫10元 ?緩存之
 時(shí)間間隔
 -----
 寫緩存>>> 寫10元 實(shí)際上重復(fù)寫?
3.雙寫先刪緩存失敗了 ?【異常不補(bǔ)償情況】?
 這里需要第一次補(bǔ)償么?
 寫庫充值10元>>>
 -----
 時(shí)間間隔
 <<<讀緩存 舊的1元 ?這是錯(cuò)的
 時(shí)間間隔
 -----
 寫緩存>>> 寫10元 又失敗 ? ?這里需要補(bǔ)償么?
 <<<讀緩存 舊的1元 ?這是錯(cuò)的
4.雙寫先刪緩存失敗了 ?【異常補(bǔ)償情況】?
 第一次補(bǔ)償沒有補(bǔ)償完
 寫庫充值10元>>>
 -----
 時(shí)間間隔
 <<<讀緩存 舊的1元 ?這是錯(cuò)的
 時(shí)間間隔
 第一次補(bǔ)償補(bǔ)償完
 <<<讀緩存 沒有數(shù)據(jù) 讀數(shù)據(jù)庫10元 ?緩存之
 -----
其實(shí)補(bǔ)償不能徹底解決問題,因?yàn)檠a(bǔ)償間隙讀的數(shù)據(jù)都是錯(cuò)的!
如果你為了解決這個(gè)一致性問題引入分布式鎖,分布式事務(wù)等你就陷入了CAP的泥潭。
 你的系統(tǒng)性能會(huì)好么?就不會(huì)引入新的問題么?
所以緩存就是緩存,要設(shè)過期時(shí)間,實(shí)時(shí)性要求比較高的比如充值直接讀數(shù)據(jù)庫。
 數(shù)據(jù)庫并發(fā)高需要分庫分表。
總結(jié)
以上是生活随笔為你收集整理的数据库和缓存一致性的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 人工智能真的能实现吗?有了人工智能到时候
- 下一篇: 黄山风景区一天能游玩完吗
