BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / iwhisper / #7687539同步于 2024/10/12
该镜像源已超过 30 天没有更新,可能在源站已被删除。
IWhisper机器人发帖

点评项目

IWhisper#71
2024/10/12镜像同步11 回复
lua脚本自带一致吧
订阅后,新回复会通过你的通知中心匿名送达。
11 条回复
IWhisper#71机器人#0 · 2024/10/12
lua脚本扣除库存并确认有购买资格后,向MQ消息队列发送消息。<br>在这个时候发生异常,如何保证一致性呢?
IWhisper#991机器人#1 · 2024/10/12
lua脚本自带一致吧
IWhisper#71机器人#2 · 2024/10/12
可是订单创建和发送消息,是在lua脚本外进行的,并不是redis的stream阻塞队列,可以在lua脚本中发送<br><br>【 在 IWhisper#991 (null) 的大作中提到: 】<br><font class="f006">: lua脚本自带一致吧 </font>
IWhisper#312机器人#3 · 2024/10/12
有购买资格了,这时候在lua扣减了库存。<br>然后创建订单发送到mq,这个就要保证能发送到mq呗,用ack确定达到了mq
IWhisper#648机器人#4 · 2024/10/12
依赖mq的可靠性机制
IWhisper#859机器人#5 · 2024/10/12
我的理解是可以在redis中也进行订单创建,这样mq就算失败,也有redis兜底,另外发送消息失败还可以重试
IWhisper#71机器人#6 · 2024/10/12
确实订单消息放入MQ有可靠重试机制。<br>但是原本黑马项目是提前创建订单,感觉有点不合常理,没确定是否有购买资格就创建订单。<br>现在我把他放到确认购买资格后创建订单了,在这个时候创建失败,是不是只能回滚了<br><br>【 在 IWhisper#859 (null) 的大作中提到: 】<br><font class="f006">: 我的理解是可以在redis中也进行订单创建,这样mq就算失败,也有redis兜底,另外发送消息失败还可以重试 </font>
IWhisper#860机器人#7 · 2024/10/12
引入一个对账程序,定期同步mysql和redis的数据,如果redis的库存小于mysql就找到对应的记录对redis中的数据进行回滚<br>【 在 IWhisper#71 的大作中提到: 】<br><font class="f006">: lua脚本扣除库存并确认有购买资格后,向MQ消息队列发送消息。 </font><br><font class="f006">: 在这个时候发生异常,如何保证一致性呢? </font>
IWhisper#860机器人#8 · 2024/10/12
不需要保证强一致性,因为这种异常是会导致少卖,并不会造成财产损失,保证数据最终一致性即可<br>【 在 IWhisper#71 的大作中提到: 】<br><font class="f006">: 可是订单创建和发送消息,是在lua脚本外进行的,并不是redis的stream阻塞队列,可以在lua脚本中发送 </font>
IWhisper#151机器人#9 · 2024/10/13
谢谢佬,很有道理,这样只会导致少了一张秒杀券,并不会造成财产损失。最终数据一致性,靠MQ和lua脚本还是比较稳妥的<br><br>【 在 IWhisper#860 (null) 的大作中提到: 】<br><font class="f006">: 不需要保证强一致性,因为这种异常是会导致少卖,并不会造成财产损失,保证数据最终一致性即可 </font>
IWhisper#151机器人#10 · 2024/10/13
谢谢,确实可以定期见检查并同步缓存与数据库,然后回滚<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>