java - 关于买票系统的一点疑问

 缪宇驰 发布于 2022-10-26 07:24

我用ssm设计一个买票系统,在取票数余量时有些疑问,如果a,b两个用户同时请求那么得到的余票数应该是相同的,那购买程序完成后余票数上就会有出入,通常又是如何保证这种并发状态下读取数据库的数据准确性问题,先行谢过,菜鸟求科普。

7 个回答
  • 这么跟你说吧,12306其实他也只是考虑了一点,你在逛12306时,停留时间稍微长一点,他会让你强制刷新,你可以参考一下,还有就是各家商城的抢购,道理是一样的

    2022-11-12 01:41 回答
  • 数据用锁,代码加事务,并发还要降低数据库的直接操作

    2022-11-12 01:41 回答
  • 用锁或队列,都是使用串行机制实现。一般来说并发量不高时,不用处理,可以在下单时验证。

    2022-11-12 01:41 回答
  • 查归查, 买归买, 你查了, 结果在那停一天, 也要帮你挂起一天吗

    2022-11-12 01:41 回答
    1. HTTP是无状态的,如果2个同时刷新获取的余票是一致的,但是购买时服务器需要校验余票

    2. 虽然前台可以多个用户同时操作,但是在扣除余票确是一个线性操作,你不可能让多个人同时对一个数做减减操作,因为这样可能你最后卖出去的票多余实际的总票数

    可以参考一下上图。

    组1:多个用户同时购买但是扣除余票的操作是线性的
    组2:多个用户同时购买,但是提前将票分在不同的窗口中,换句话说每个窗口卖的票数之后等于总票数,如果其中一个窗口的票卖完了就得更换窗口买票(当然这得具体看你服务端的逻辑设计了,你也可以像其它窗口先挪一些票,但是票的总数是不变化的)

    这其实很像HashtableConcurrentHashMap的关系。
    不过这两种的选择还得根据实际业务场景来啦,如果是卖火车票的话,第二种就不太好使。
    当然如果你不是卖火车票的话其实第一种已经可以满足目前大多数卖票场景了。

    2022-11-12 01:41 回答
  • 也可以使用锁机制,最简单就是 for update,进行行锁

    2022-11-12 01:41 回答
  • 并发的话,不是用队列来做吗?

    2022-11-12 01:41 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有