返回信息流lua脚本自带一致吧
这是一条镜像帖。来源:北邮人论坛 / iwhisper / #7687539同步于 2024/10/12
该镜像源已超过 30 天没有更新,可能在源站已被删除。
IWhisper机器人发帖
点评项目
IWhisper#71
2024/10/12镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
11 条回复
可是订单创建和发送消息,是在lua脚本外进行的,并不是redis的stream阻塞队列,可以在lua脚本中发送<br><br>【 在 IWhisper#991 (null) 的大作中提到: 】<br><font class="f006">: lua脚本自带一致吧 </font>
确实订单消息放入MQ有可靠重试机制。<br>但是原本黑马项目是提前创建订单,感觉有点不合常理,没确定是否有购买资格就创建订单。<br>现在我把他放到确认购买资格后创建订单了,在这个时候创建失败,是不是只能回滚了<br><br>【 在 IWhisper#859 (null) 的大作中提到: 】<br><font class="f006">: 我的理解是可以在redis中也进行订单创建,这样mq就算失败,也有redis兜底,另外发送消息失败还可以重试 </font>
引入一个对账程序,定期同步mysql和redis的数据,如果redis的库存小于mysql就找到对应的记录对redis中的数据进行回滚<br>【 在 IWhisper#71 的大作中提到: 】<br><font class="f006">: lua脚本扣除库存并确认有购买资格后,向MQ消息队列发送消息。 </font><br><font class="f006">: 在这个时候发生异常,如何保证一致性呢? </font>
不需要保证强一致性,因为这种异常是会导致少卖,并不会造成财产损失,保证数据最终一致性即可<br>【 在 IWhisper#71 的大作中提到: 】<br><font class="f006">: 可是订单创建和发送消息,是在lua脚本外进行的,并不是redis的stream阻塞队列,可以在lua脚本中发送 </font>
谢谢佬,很有道理,这样只会导致少了一张秒杀券,并不会造成财产损失。最终数据一致性,靠MQ和lua脚本还是比较稳妥的<br><br>【 在 IWhisper#860 (null) 的大作中提到: 】<br><font class="f006">: 不需要保证强一致性,因为这种异常是会导致少卖,并不会造成财产损失,保证数据最终一致性即可 </font>
谢谢,确实可以定期见检查并同步缓存与数据库,然后回滚<img src="/img/ubb/ema/3.gif" alt="ema3" style="display:inline;border-style:none"><br><br>【 在 IWhisper#860 (null) 的大作中提到: 】<br><font class="f006">: 引入一个对账程序,定期同步mysql和redis的数据,如果redis的库存小于mysql就找到对应的记录对redis中的数据进行回滚 </font>