本篇內(nèi)容介紹了“先進(jìn)行緩存操作還是數(shù)據(jù)庫操作”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站,成都做網(wǎng)站公司-創(chuàng)新互聯(lián)已向近千家企業(yè)提供了,網(wǎng)站設(shè)計(jì),網(wǎng)站制作,網(wǎng)絡(luò)營銷等服務(wù)!設(shè)計(jì)與技術(shù)結(jié)合,多年網(wǎng)站推廣經(jīng)驗(yàn),合理的價(jià)格為您打造企業(yè)品質(zhì)網(wǎng)站。
緩存刪除后,尚未更新數(shù)據(jù)庫,并發(fā)讀請(qǐng)求,從數(shù)據(jù)庫讀到了舊值,并且更新到緩存導(dǎo)致后續(xù)請(qǐng)求都是舊值。
時(shí)間 | 更新操作 |
|
刪除redis | 讀取操作 |
| 緩存沒有數(shù)據(jù) |
| 從數(shù)據(jù)庫讀到舊值 |
| 回寫redis |
更新MySQL | 返回 |
返回 |
|
經(jīng)典的延遲雙刪。就是:先更新數(shù)據(jù)線,再刪緩存,之后延遲一段時(shí)間再刪緩存。
時(shí)間 | 更新操作 |
|
刪除redis | 讀取操作 |
| 緩存沒有數(shù)據(jù) |
| 從數(shù)據(jù)庫讀到舊值 |
| 回寫redis |
更新mysql | 返回 |
延遲一段時(shí)間 |
|
|
|
刪除redis |
|
| 讀取操作 |
| 緩存沒有數(shù)據(jù) |
| 從數(shù)據(jù)庫讀到新值 |
| 回寫redis |
| 返回 |
延遲一段時(shí)間,挺重要不能拍腦袋,需要考慮2個(gè)因素
時(shí)間 | 更新操作 |
|
刪除redis | 讀取操作 |
| 緩存沒有數(shù)據(jù) |
| 從數(shù)據(jù)庫讀到舊值 |
更新mysql |
|
延遲一段時(shí)間, |
|
刪除redis |
|
| 回寫redis |
| 返回 |
自建mysql集群,配置不當(dāng),會(huì)出現(xiàn)mysql主從同步延遲大的情況。
時(shí)間 | 更新操作 |
|
刪除redis | 讀取操作 |
| 緩存沒有數(shù)據(jù) |
| 從數(shù)據(jù)庫讀到舊值 |
| 回寫redis |
更新mysql主庫 | 返回 |
延遲一段時(shí)間, |
|
|
|
刪除redis | 讀取操作 |
| 緩存沒有數(shù)據(jù) |
| 從庫讀到舊值 |
mysql主從同步完成 | 回寫redis |
| 返回 |
延遲時(shí)間必須大于查詢接口的響應(yīng)時(shí)間。
并且要大于mysql主從同步的時(shí)間,防止主從同步延遲造成,讀到舊值的情況
--- 溫安適 20210225
注意:建議查詢接口要從主庫進(jìn)行讀取
時(shí)間 | 更新操作 |
|
更新mysql主庫 | 讀取操作 |
| 緩存有數(shù)據(jù),讀到舊值 |
刪除redis | 返回 |
|
|
| 讀取操作 |
| 緩存沒有數(shù)據(jù) |
| 主庫讀到新值 |
| 回寫redis |
| 返回 |
等待緩存刪除完成,期間數(shù)據(jù)庫會(huì)有不一致數(shù)據(jù)短暫存在,但是一般可以不處理。
策略 | 潛在問題 | 解決方式 | 注意事項(xiàng) |
先刪緩存, | 并發(fā)條件下 | 延遲雙刪 | 延遲時(shí)間必須 |
先更數(shù)據(jù)庫, | 并發(fā)條件下 | 不處理, | 查詢接口建議讀主庫,存在不一致, |
“先進(jìn)行緩存操作還是數(shù)據(jù)庫操作”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!