您好,登錄后才能下訂單哦!
本篇內容介紹了“先進行緩存操作還是數據庫操作”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
緩存刪除后,尚未更新數據庫,并發讀請求,從數據庫讀到了舊值,并且更新到緩存導致后續請求都是舊值。
時間 | 更新操作 |
|
刪除redis | 讀取操作 | |
| 緩存沒有數據 | |
| 從數據庫讀到舊值 | |
| 回寫redis | |
更新mysql | 返回 | |
返回 |
|
經典的延遲雙刪。就是:先更新數據線,再刪緩存,之后延遲一段時間再刪緩存。
時間 | 更新操作 |
|
刪除redis | 讀取操作 | |
| 緩存沒有數據 | |
| 從數據庫讀到舊值 | |
| 回寫redis | |
更新mysql | 返回 | |
延遲一段時間 |
| |
|
| |
刪除redis |
| |
| 讀取操作 | |
| 緩存沒有數據 | |
| 從數據庫讀到新值 | |
| 回寫redis | |
| 返回 |
延遲一段時間,挺重要不能拍腦袋,需要考慮2個因素
時間 | 更新操作 |
|
刪除redis | 讀取操作 | |
| 緩存沒有數據 | |
| 從數據庫讀到舊值 | |
更新mysql |
| |
延遲一段時間, |
| |
刪除redis |
| |
| 回寫redis | |
| 返回 |
自建mysql集群,配置不當,會出現mysql主從同步延遲大的情況。
時間 | 更新操作 |
|
刪除redis | 讀取操作 | |
| 緩存沒有數據 | |
| 從數據庫讀到舊值 | |
| 回寫redis | |
更新mysql主庫 | 返回 | |
延遲一段時間, |
| |
|
| |
刪除redis | 讀取操作 | |
| 緩存沒有數據 | |
| 從庫讀到舊值 | |
mysql主從同步完成 | 回寫redis | |
| 返回 |
延遲時間必須大于查詢接口的響應時間。
并且要大于mysql主從同步的時間,防止主從同步延遲造成,讀到舊值的情況
--- 溫安適 20210225
注意:建議查詢接口要從主庫進行讀取
時間 | 更新操作 |
|
更新mysql主庫 | 讀取操作 | |
| 緩存有數據,讀到舊值 | |
刪除redis | 返回 | |
|
| |
| 讀取操作 | |
| 緩存沒有數據 | |
| 主庫讀到新值 | |
| 回寫redis | |
| 返回 |
等待緩存刪除完成,期間數據庫會有不一致數據短暫存在,但是一般可以不處理。
策略 | 潛在問題 | 解決方式 | 注意事項 |
先刪緩存, | 并發條件下 | 延遲雙刪 | 延遲時間必須 |
先更數據庫, | 并發條件下 | 不處理, | 查詢接口建議讀主庫,存在不一致, |
“先進行緩存操作還是數據庫操作”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。