黑马点评秒杀问题,大佬帮帮
#黑龙江栋脑科技有限公司##面##如果再来一次,你还会选择这个工作吗?##黑马点评##面试##牛客AI配图神器#黑马点评秒杀问题
视频的流程大概是这样的:
- 执行lua脚本,校验下单资格,判断库存是否充足,判断用户是否下过单,如果有资格则在redis与扣减库存,将用户家优惠卷的id设置到set。
- 设置消息并发送到MQ
- 多线程获取消息进行下单
- 获取消息
- 扣减库存
- 创建订单
问题:
- 如果创建订单或者扣减库存失败了,redis的库存已经扣减,用户信息已经设置到set里面,怎么恢复
- 是在下单加个trycatch,然后恢复吗,还是什么办法
- 如果应用挂机了,trycatch不到了,怎么恢复
- 添加定时任务检查库存是否一致吗,那要是我扣减lredis的库存,还没有扣减数据库的库存,定时任务执行了,给我恢复了,这不是乱了吗,就是原来reids和mysql都是1,扣减redis为0,定时任务回复为1,数据库扣减为0
- 怎么保证库存的一致性
视频的流程大概是这样的:
- 执行lua脚本,校验下单资格,判断库存是否充足,判断用户是否下过单,如果有资格则在redis与扣减库存,将用户家优惠卷的id设置到set。
- 设置消息并发送到MQ
- 多线程获取消息进行下单
- 获取消息
- 扣减库存
- 创建订单
问题:
- 如果创建订单或者扣减库存失败了,redis的库存已经扣减,用户信息已经设置到set里面,怎么恢复
- 是在下单加个trycatch,然后恢复吗,还是什么办法
- 如果应用挂机了,trycatch不到了,怎么恢复
- 添加定时任务检查库存是否一致吗,那要是我扣减lredis的库存,还没有扣减数据库的库存,定时任务执行了,给我恢复了,这不是乱了吗,就是原来reids和mysql都是1,扣减redis为0,定时任务回复为1,数据库扣减为0
- 怎么保证库存的一致性
全部评论

其实你这个问题千言万语是一句话:如何保证Redis跟数据库的一致性嘛。
各大公司都是有那种对账的。数据一致性校验平台这种中间件来去确保二者之间数据的一致性。
你可以这样理解,就是我们在这个平台上面呢会基于代码呢去实现一个规则,就是说我去监听数据库的binlog日志,然后会对binlog日志进行实时解析,跟目标数据源进行对比,以此呢来判断数据是否一致。
那放到你这个场景里面呢,就是说每当一个用户的优惠券落库的时候呢,那它会产生对应的log日志,我们就把这个日志捞出来,从log日志里面取出信息拼接Redis的对应key,查一遍Redis。
如果radius里面有数据,那就说明c口跟log的数据是一致的,如果没有就说明他们两个有一端不可信嘛,那你就选择可信的一端,对另外一端进行数据补偿就好。
m
相关推荐