目前相當系統架構使用的是mysql和redis組合來實現,這兩者在使用過程中對不同場景會對資料一致性有不一樣的要求,大家都知道mysql主要做持久化資料的,redis唯讀資料的,大家都知道redis用來處理高併發情況的多所以我就稍微根據自己專案經驗總結下
方案一.
對於實時要求不高的資料,將這些資料放入redis,請求來了直接查詢redis,比如使用者的基本資訊,排行榜資訊。針對那些強實時性的業務例如虛擬貨幣、物品購買件數等等,則直接穿透redis至mysql上,等到mysql上寫入成功,再同步更新到redis上去。這樣既可以起到redis的分流大量查詢請求的作用,又保證了關鍵資料的一致性。
方案二.
如果寫請求比較多時,則直接寫入redis中,隔時將批量寫入的請求,同步到mysql中,如果寫入請求不多,可以寫入redis後,馬上同步到mysql中,這兩種方式都有利弊,開發者工具實際業務場景來選擇
方案三.
阿里巴巴的一款開源框架canal,提供了一種發布/ 訂閱模式的同步機制,通過該框架我們可以對mysql的binlog進行訂閱,這樣一旦mysql中產生了新的寫入、更新、刪除等操作,就可以把binlog相關的訊息推送至redis,redis再根據binlog中的記錄,對redis進行更新。值得注意的是,binlog需要手動開啟,並且不會記錄關於mysql查詢的命令和操作。
如何保持mysql和redis中資料的一致性
快取由於其高併發和高效能的特性,已經在專案中被廣泛使用。在讀取快取方面,大家沒啥疑問,都是按照下圖的流程來進行業務操作。在快取和資料庫同時存在時,如果有寫操作的時候,先運算元據庫還是先操作快取呢?先思考一下,可能會存在哪些問題,再往下看。這套方案,大家是普遍反對的。為什麼呢?有如下兩點原因。3.1....
redis和mysql怎樣保持資料一致
服務端獲取資料首先從redis獲取,如果redis中的資料被刪除就從mysql中獲取資料,在把資料更新到redis 1.redis設定固定時間更新,時間不宜太長,缺點是修改mysql資料不會立即更新 2.更新mysql時同時刪除redis的資料,但這個操作不是原子性的,如果這個時候有其他執行緒插進來...
資料庫 如何保持Redis和MySQL資料一致
原文 redis在啟動之後,從資料庫載入資料。讀請求 不要求強一致性的讀請求,走redis,要求強一致性的直接從mysql讀取 寫請求 資料首先都寫到資料庫,之後更新redis 先寫redis再寫mysql,如果寫入失敗事務回滾會造成redis中存在髒資料 mysql處理實時性資料,例如金融資料 交...