提问

来源:3-1 JDK9新特性-jshell交互式工具(加片头)

c9870884

2023-07-25

老师,请问以下场景:
由于12306项目缓存和数据库的一致性存在延迟,缓存中显示还剩1张票,而数据库实际的情况是无票的时候(此时缓存没来得及更新)。
1.假设此时有一个请求进来并且拿到了令牌,那么此时这个请求能够走到流程一分为二之后的后半段去拿锁购票吗?还是说直接就在前半段就返回失败了?

2.如果请求能够进入后半段的话,是不是需要要等到前面选座完成之后,具体去扣减数据库库存的时候才会报错无票然后返回呢?还是说先进行数据库余票的判断,只有余票不为0才去做之后的座位选择呢?

3.如果是数据库此时确实还有余票的情况,那么是先执行数据库余票的扣减之后再做选座逻辑,还是,先判断数据库余票只要>0之后直接先进行选座,选座成功了之后再去扣减数据库库存呢?

很抱歉老师,上述我去看了代码之后因为有些理不太清,所以向您求证请教一下。

写回答

1回答

甲蛙

2023-07-26

  1. 能不能拿到令牌,这个跟令牌余量是相关的,即使没票了,但令牌还有余量,就会拿到令牌,进入购票流程里

  2. 3. 我们项目里是先校验余票,再选座的,如下图,看注释

    //img.mukewang.com/szimg/64c080d60927031716821030.jpg

0
0

新版Springboot3.0打造能落地的高并发仿12306售票系统

最新版Spring3.0仿12306售票系统实战

852 学习 · 511 问题

查看课程