一张车票引发的连锁反应
🚀 如何把12306项目“吃透”?
如果你正在为校招面试做准备,面临着简历上“烂大街”的项目,面试机会较少,或者希望将 12306 项目充实到简历中等问题,欢迎了解「拿个offer-开源&项目实战」知识星球。我们提供以下主要服务:
- 面试服务:获取完整项目文档与教学视频,涵盖项目从零到一的启动方法,如何在简历中突显 12306 项目经验,项目亮点解析,以及分享包含 12306 面试真题的大厂面试经验。
- 项目学习:向我1v1发起问题提问,包括但不限于 12306 项目,会认真对待每个问答;提供简历编写指南服务,同时使用星球内部公有云中间件环境,避免本地环境开发的繁琐配置。
列车余票如何扣减
下文实战章节中我们以 12306 G35 趟高铁复兴号为大家举例。
高铁复兴号 G35 趟列车共有5个站点,北京南、济南西、南京南、杭州东、宁波,接下来会以这些内容为基础展开。
刚接触 12306 的大部分同学可能会误以为,如果购买了从北京南到南京南的车票,只会扣减北京南到南京南站点的车票。但实际情况并非如此。购买了北京南到南京南的列车票时,会扣减沿途站点的库存。
假设购买商务座,列车站点间的初始库存是一致的。下面是购买北京南到南京南车票的流程图示:
再来一个进阶版本的,如果购买济南西到杭州东的车票,流程图如下所示。大家可能会比较疑惑,为什么要扣减北京南到南京南、北京南到宁波、北京南到杭州东以及北京南到宁波?这是因为中间车票被购买了,北京南作为始发站,只能购买北京南到济南西的车票。
如何保证缓存一致性
为了满足用户对一趟列车不同站点不同座位类型的余量查询需求,我们采取了一种优化方案。我们将这些余量信息存储在缓存中,以便用户可以快速查询。
然而,在用户创建订单并完成支付时,我们需要同时从数据库和缓存中扣减相应的列车站点余票。这种设计不仅提高了查询效率,也保证了数据的一致性,确保订单操作的准确性。
在这个业务场景中的缓存与数据库一致性如何保证?结合大家常在用的以及网上一些方案,给出一些我的思考以及咱们 12306 中实际的解决方案。
注意,下文中都是以多请求并发场景下的思考。