【本文Bilibili视频地址】
希望大家多多关注
火车票的售卖模式和正常的商品不同,其他商品的库存比较单一,而 12306 库存基于车次中的城市到城市。举个例子来说:
G1 车次从北京到上海虹桥,中间经过站有济南和南京南:
在售票时意味着可以购买以下几种组合
- 北京南–济南西
- 北京南–南京南
- 北京南–上海虹桥
- 济南西–南京南
- 济南西–上海虹桥
- 南京南–上海虹桥
而且相邻的方案,如果有公共的站,还会存在库存的依赖关系。比如:南京南–上海虹桥的票已经售完,那就意味着所有到上海虹桥的方案都是无票,但是我们可以买其他几个方案。
这种库存之间的耦合对于库存修改带来很多麻烦,如果采用简单的分散行程的方法来统计线路,那可能导致商品的数量很大,后续如果出现车次变更到达站或者其他变化,库存数据维护起来成本非常的高。
使用 redis bitmap 数据结构能够很好的解决这个问题,具体是如何实现:
为了简化场景,假设 G1 一个站最多只能卖 10 张票,对每一站维护一个余票