84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
应用在电商购物库存场景1、用户下单后 redis对库存id做增加(件数)2、用户付款成功后 redis对库存id做减少(件数),同时减少mysql里的库存
问题是:流程中出现问题,mysql可以做数据回滚,但redis不可以除了记录日志分析外,有较好办法可以解决这个问题么
你指得MySQL回滾是交易的回滾嗎?
既然流程出問題了,那程式碼應該可以捕捉到出問題了,手動回滾redis即可。 或等流程事務成立提交後,再修改redis。
還是事物問題。 不要把mysql操作當做一件事,redis操作當做另一件事。 要把資料增刪改當作做一件事。不論是mysql還是redis,只要有一個新增刪除出錯了,就回溯事務。 redis請使用pipeline。
換個思路吧,從產品角度你就應該允許redis的資料是不同步的,就算redis可以持久化,在內存還沒刷到硬碟之前伺服器掛了就有丟資料的可能性,你只要保證下單的時候SKU庫存是從Mysql偵測的即可,就算他繞過了redis,也能保證最終結果是正確的
mysql做底層邏輯保證,redis建議只做緩存,redis資料定期或不存在的時候 去和mysql同步。
你指得MySQL回滾是交易的回滾嗎?
既然流程出問題了,那程式碼應該可以捕捉到出問題了,手動回滾redis即可。
或等流程事務成立提交後,再修改redis。
還是事物問題。
不要把mysql操作當做一件事,redis操作當做另一件事。
要把資料增刪改當作做一件事。不論是mysql還是redis,只要有一個新增刪除出錯了,就回溯事務。 redis請使用pipeline。
換個思路吧,從產品角度你就應該允許redis的資料是不同步的,就算redis可以持久化,在內存還沒刷到硬碟之前伺服器掛了就有丟資料的可能性,你只要保證下單的時候SKU庫存是從Mysql偵測的即可,就算他繞過了redis,也能保證最終結果是正確的
mysql做底層邏輯保證,redis建議只做緩存,redis資料定期或不存在的時候 去和mysql同步。