您好,登錄后才能下訂單哦!
這篇文章主要介紹“Redis緩存更新一致性的簡單介紹”,在日常操作中,相信很多人在Redis緩存更新一致性的簡單介紹問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Redis緩存更新一致性的簡單介紹”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
在設計更新策略時,我們需要考慮多個方面的問題:
對系統吞吐量的影響:比如更新緩存策略產生的數據庫負載小于刪除緩存策略的負載
并發安全性:并發讀寫時某些異常操作順序可能造成數據不一致,如緩存中長期保存過時數據
更新失敗的影響:若某個操作失敗,如何對業務影響降到最小
檢測和修復故障的難度: 操作失敗導致的錯誤會在日志留下詳細的記錄容易檢測和修復。并發問題導致的數據錯誤沒有明顯的痕跡難以發現,且在流量高峰期更容易產生并發錯誤產生的業務風險較大。
更新緩存有兩種方式:
刪除失效緩存: 讀取時會因為未命中緩存而從數據庫中讀取新的數據并更新到緩存中
更新緩存: 直接將新的數據寫入緩存覆蓋過期數據
更新緩存和更新數據庫有兩種順序:
先數據庫后緩存
先緩存后數據庫
兩兩組合共有四種更新策略,現在我們逐一進行分析。
并發問題通常由于后開始的線程卻先完成操作導致,我們把這種現象稱為“搶跑”。下面我們逐一分析四種策略中“搶跑”帶來的錯誤。
先更新數據庫,再刪除緩存
若數據庫更新成功,刪除緩存操作失敗,則此后讀到的都是緩存中過期的數據,造成不一致問題。
可能發生的并發錯誤:
先更新數據庫,再更新緩存
同刪除緩存策略一樣,若數據庫更新成功緩存更新失敗則會造成數據不一致問題。
可能發生的并發錯誤:
當兩個寫線程發生沖突時,可以通過比較數據版本方式避免線程A寫入舊的數據。
先刪除緩存,再更新數據庫
可能發生的并發錯誤:
先更新緩存,再更新數據庫
若緩存更新成功數據庫更新失敗, 則此后讀到的都是未持久化的數據。因為緩存中的數據是易失的,這種狀態非常危險。
因為數據庫因為鍵約束導致寫入失敗的可能性較高,所以這種策略風險較大。
可能發生的并發錯誤:
異步更新
雙寫更新的邏輯復雜,一致性問題較多。現在我們可以采用訂閱數據庫更新的方式來更新緩存。
我們可以采用API服務器只寫入數據庫,而另一個線程訂閱數據庫 binlog 增量進行緩存更新的策略。
這個問題同樣可以采用異步線程更新緩存,且寫入緩存時比較數據版本的方法來解決。
到此,關于“Redis緩存更新一致性的簡單介紹”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。