文章詳情頁
redis與mysql一致性問題
瀏覽:56日期:2022-06-21 15:48:16
問題描述
應用在電商購物庫存場景1、用戶下單后 redis對庫存id做增加(件數)2、用戶付款成功后 redis對庫存id做減少(件數),同時減少mysql里的庫存
問題是:流程中出現問題,mysql可以做數據回滾,但redis不可以除了記錄日志分析外,有較好辦法可以解決這個問題么
問題解答
回答1:你指得MySQL回滾是事務的回滾嗎?
既然流程出問題了,那代碼應該能捕獲到出問題了,手動回滾redis即可?;蛘叩攘鞒淌聞粘闪⑻峤缓?,再修改redis。
回答2:還是事物問題。不要把mysql操作當做一件事,redis操作當做另一件事。要把數據增刪改當做一件事。不論是mysql還是redis,只要有一個添加刪除出錯了,就回滾事務。redis請使用pipeline。
回答3:換個思路吧,從產品角度你就應該允許redis的數據是不同步的,就算redis可以持久化,在內存還沒有刷到硬盤之前服務器掛了就有丟數據的可能性,你只要保證下單的時候SKU庫存是從Mysql檢測的即可,就算他繞過了redis,也能保證最終結果是正確的
回答4:mysql做底層邏輯保證,redis建議只做緩存,redis數據定期或者不存在的時候 去和mysql同步。
相關文章:
1. html5 - HTML代碼中的文字亂碼是怎么回事?2. html5 - 急求?被公司問住了3. javascript - vue2.0中,$refs對象為什么用駝峰的方式獲取不到屬性?4. javascript - vue2如何獲取v-model變量名5. javascript - angular使從elastichearch中取出的文本高亮顯示,如圖所示6. python - 爬蟲模擬登錄后,爬取csdn后臺文章列表遇到的問題7. javascript - 求幫助 , ATOM不顯示界面!!!!8. javascript - nodejs使用mongoose連接數據庫,使用post提交表單在后臺,后臺處理后調用res.redirect()跳轉界面無效?9. javascript - 能否讓vue-cli的express修改express重啟服務10. python bottle跑起來以后,定時執行的任務為什么每次都重復(多)執行一次?
排行榜
