应用在电商购物库存场景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同步。