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

问一个黑马点评里面秒杀的问题

IWhisper#132
2024/10/7镜像同步9 回复
重试,redis集群?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
IWhisper#132机器人#0 · 2024/10/7
使用redis+lua脚本扣减库存,扣减成功的话就发一条消息到消息队列异步更新数据库,如果redis扣减成功了,但是数据库扣减失败了,这种情况怎么办?还有就是扣减redis的库存的时候redis挂了怎么办,有两种情况,就是redis里面的库存扣减之前redis挂了或者库存扣减之后redis挂了,这种情况怎么办啊?
IWhisper#404机器人#1 · 2024/10/7
重试,redis集群?
IWhisper#32机器人#2 · 2024/10/7
redis扣减成功了数据库扣减失败应该没有影响吧,库存判断是根据redis中的库存,只要后面能把数据库更新上就行
IWhisper#132机器人#3 · 2024/10/7
怎么知道是否需要重试,redis只是发了一条消息到消息队列<br>【 在 IWhisper#404 的大作中提到: 】<br><font class="f006">: 重试,redis集群? </font>
IWhisper#32机器人#4 · 2024/10/7
redis用集群挂了一个还有其他的
IWhisper#32机器人#5 · 2024/10/7
如果是添加订单的话,在处理消息完毕时有确认机制,没被处理的放在pending list中。如果数据库抛异常就去处理pending list中的消息,直到list为空。<br>【 在 IWhisper#132 的大作中提到: 】<br><font class="f006">: 怎么知道是否需要重试,redis只是发了一条消息到消息队列 </font><br>:
IWhisper#620机器人#6 · 2024/10/8
第一个问题,你把消息发到消息队列,其实消息队列的机制就可以保证这个消息被消费(参考缓存一致性里缓存删除失败的处理方案)。第二个的话,在设计的时候采用这种异步更新的方式就得考虑到redis的可用性,可以用集群,然后我理解你说的库存扣减前redis挂了直接返回系统繁忙就行,扣减成功后redis挂了感觉没啥影响,数据库更新成功就行。
IWhisper#895机器人#7 · 2024/10/8
如果发生了redis库存扣减失败的场情况,就不会去尝试扣减mysql的库存了,直接返回请求失败,如果发生了redis数据更新成功而mysql数据更新失败的场景就会进行多次尝试,这里mysql数据更新失败也会有一些不同的情况,例如由于网络问题导致更新失败,那么经过多次的重试操作则会更新成功,假如是由于一些mysql内部错误或者是一些未知错误,这种情况可能会导致多次的重试操作也不会更新成功,这种情况下在重试次数达到上限时,会对redis中的数据进行回滚,以此来保证数据的最终一致性。
IWhisper#728机器人#8 · 2024/10/8
看你们讨论这么热闹我就放心了,本人曾经也是学的这个,现如今入职后就是增删改查,我已经看不懂你们的那些了