redis與mysql一致性問題
問題描述
應(yīng)用在電商購物庫存場景1、用戶下單后 redis對庫存id做增加(件數(shù))2、用戶付款成功后 redis對庫存id做減少(件數(shù)),同時(shí)減少mysql里的庫存
問題是:流程中出現(xiàn)問題,mysql可以做數(shù)據(jù)回滾,但redis不可以除了記錄日志分析外,有較好辦法可以解決這個(gè)問題么
問題解答
回答1:你指得MySQL回滾是事務(wù)的回滾嗎?
既然流程出問題了,那代碼應(yīng)該能捕獲到出問題了,手動(dòng)回滾redis即可。或者等流程事務(wù)成立提交后,再修改redis。
回答2:還是事物問題。不要把mysql操作當(dāng)做一件事,redis操作當(dāng)做另一件事。要把數(shù)據(jù)增刪改當(dāng)做一件事。不論是mysql還是redis,只要有一個(gè)添加刪除出錯(cuò)了,就回滾事務(wù)。redis請使用pipeline。
回答3:換個(gè)思路吧,從產(chǎn)品角度你就應(yīng)該允許redis的數(shù)據(jù)是不同步的,就算redis可以持久化,在內(nèi)存還沒有刷到硬盤之前服務(wù)器掛了就有丟數(shù)據(jù)的可能性,你只要保證下單的時(shí)候SKU庫存是從Mysql檢測的即可,就算他繞過了redis,也能保證最終結(jié)果是正確的
回答4:mysql做底層邏輯保證,redis建議只做緩存,redis數(shù)據(jù)定期或者不存在的時(shí)候 去和mysql同步。
相關(guān)文章:
1. python文檔怎么查看?2. python - pycharm 自動(dòng)刪除行尾空格3. python - Pycharm的Debug用不了4. javascript - 有適合開發(fā)手機(jī)端Html5網(wǎng)頁小游戲的前端框架嗎?5. python - pandas按照列A和列B分組,將列C求平均數(shù),怎樣才能生成一個(gè)列A,B,C的dataframe6. html - eclipse 標(biāo)簽錯(cuò)誤7. python 利用subprocess庫調(diào)用mplayer時(shí)發(fā)生錯(cuò)誤8. 請問PHPstudy中的數(shù)據(jù)庫如何創(chuàng)建索引9. datetime - Python如何獲取當(dāng)前時(shí)間10. 安全性測試 - nodejs中如何防m(xù)ySQL注入
