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同步。