redis與mysql一致性問題
問題描述
應(yī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. docker安裝后出現(xiàn)Cannot connect to the Docker daemon.2. java - SSH框架中寫分頁時(shí)service層中不能注入分頁類3. docker-compose中volumes的問題4. boot2docker無法啟動(dòng)5. docker網(wǎng)絡(luò)端口映射,沒有方便點(diǎn)的操作方法么?6. nignx - docker內(nèi)nginx 80端口被占用7. javascript - vue生成一維碼?求助!!!!!急8. javascript - mock.js可以存儲(chǔ)數(shù)據(jù)嗎9. 如何使用git對(duì)word文檔進(jìn)行版本控制?10. 求救一下,用新版的phpstudy,數(shù)據(jù)庫過段時(shí)間會(huì)消失是什么情況?

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