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. javascript - sublime快鍵鍵問題2. javascript - immutable配合react提升性能?3. Apache 已經(jīng)把網(wǎng)站根目錄的改為allow from all了,但是服務(wù)器還是不能訪問?4. 配置Apache時,添加對PHP的支持時語法錯誤5. phpstudy8.1支持win11系統(tǒng)嗎?6. css - 寫頁面遇到個布局問題,求大佬們幫解答,在線等,急!~7. vue.js - Vue 如何像Angular.js watch 一樣監(jiān)聽數(shù)據(jù)變化8. javascript - nodejs關(guān)于進程間發(fā)送句柄的一點疑問9. 實現(xiàn)bing搜索工具urlAPI提交10. javascript - 移動端上不能實現(xiàn)拖拽布局嗎?

網(wǎng)公網(wǎng)安備