84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
应用在电商购物库存场景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同步。