redis與mysql一致性問題
問題描述
應(yīng)用在電商購物庫存場景1、用戶下單后 redis對庫存id做增加(件數(shù))2、用戶付款成功后 redis對庫存id做減少(件數(shù)),同時減少mysql里的庫存
問題是:流程中出現(xiàn)問題,mysql可以做數(shù)據(jù)回滾,但redis不可以除了記錄日志分析外,有較好辦法可以解決這個問題么
問題解答
回答1:你指得MySQL回滾是事務(wù)的回滾嗎?
既然流程出問題了,那代碼應(yīng)該能捕獲到出問題了,手動回滾redis即可。或者等流程事務(wù)成立提交后,再修改redis。
回答2:還是事物問題。不要把mysql操作當(dāng)做一件事,redis操作當(dāng)做另一件事。要把數(shù)據(jù)增刪改當(dāng)做一件事。不論是mysql還是redis,只要有一個添加刪除出錯了,就回滾事務(wù)。redis請使用pipeline。
回答3:換個思路吧,從產(chǎn)品角度你就應(yīng)該允許redis的數(shù)據(jù)是不同步的,就算redis可以持久化,在內(nèi)存還沒有刷到硬盤之前服務(wù)器掛了就有丟數(shù)據(jù)的可能性,你只要保證下單的時候SKU庫存是從Mysql檢測的即可,就算他繞過了redis,也能保證最終結(jié)果是正確的
回答4:mysql做底層邏輯保證,redis建議只做緩存,redis數(shù)據(jù)定期或者不存在的時候 去和mysql同步。
相關(guān)文章:
1. Span標(biāo)簽2. css - 求推薦適用于vue2的框架 像bootstrap這種類型的3. docker-machine添加一個已有的docker主機(jī)問題4. docker images顯示的鏡像過多,狗眼被亮瞎了,怎么辦?5. 關(guān)docker hub上有些鏡像的tag被標(biāo)記““This image has vulnerabilities””6. SessionNotFoundException:會話ID為null。調(diào)用quit()后使用WebDriver嗎?(硒)7. java - Collections類里的swap函數(shù),源碼為什么要新定義一個final的List型變量l指向傳入的list?8. angular.js使用$resource服務(wù)把數(shù)據(jù)存入mongodb的問題。9. redis啟動有問題?10. css - 關(guān)于div自適應(yīng)問題,大家看圖吧,說不清
