redis與mysql一致性問題
問題描述
應(yīng)用在電商購物庫存場(chǎng)景1、用戶下單后 redis對(duì)庫存id做增加(件數(shù))2、用戶付款成功后 redis對(duì)庫存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請(qǐng)使用pipeline。
回答3:換個(gè)思路吧,從產(chǎn)品角度你就應(yīng)該允許redis的數(shù)據(jù)是不同步的,就算redis可以持久化,在內(nèi)存還沒有刷到硬盤之前服務(wù)器掛了就有丟數(shù)據(jù)的可能性,你只要保證下單的時(shí)候SKU庫存是從Mysql檢測(cè)的即可,就算他繞過了redis,也能保證最終結(jié)果是正確的
回答4:mysql做底層邏輯保證,redis建議只做緩存,redis數(shù)據(jù)定期或者不存在的時(shí)候 去和mysql同步。
相關(guān)文章:
1. javascript - 在 vue里面用import引入js文件,結(jié)果為undefined2. 如何分別在Windows下用Winform項(xiàng)模板+C#,在MacOSX下用Cocos Application項(xiàng)目模板+Objective-C實(shí)現(xiàn)一個(gè)制作游戲的空的黑窗口?3. python - linux怎么在每天的凌晨2點(diǎn)執(zhí)行一次這個(gè)log.py文件4. javascript - ...mapGetters和...mapState獲取到的state,怎么拿來在methods中操作?5. 小程序怎么加外鏈,語句怎么寫!求救新手,開文檔沒發(fā)現(xiàn)6. php如何獲取訪問者路由器的mac地址7. 正兒八經(jīng)地請(qǐng)教天蓬老師8. [python2]local variable referenced before assignment問題9. python沒入門,請(qǐng)教一個(gè)問題10. git - 使用淘寶npm安裝hexo出現(xiàn)問題?
