我用ssm设计一个买票系统,在取票数余量时有些疑问,如果a,b两个用户同时请求那么得到的余票数应该是相同的,那购买程序完成后余票数上就会有出入,通常又是如何保证这种并发状态下读取数据库的数据准确性问题,先行谢过,菜鸟求科普。
我用ssm设计一个买票系统,在取票数余量时有些疑问,如果a,b两个用户同时请求那么得到的余票数应该是相同的,那购买程序完成后余票数上就会有出入,通常又是如何保证这种并发状态下读取数据库的数据准确性问题,先行谢过,菜鸟求科普。
HTTP是无状态的,如果2个同时刷新获取的余票是一致的,但是购买时服务器需要校验余票
虽然前台可以多个用户同时操作,但是在扣除余票确是一个线性操作,你不可能让多个人同时对一个数做减减操作,因为这样可能你最后卖出去的票多余实际的总票数
可以参考一下上图。
组1:多个用户同时购买但是扣除余票的操作是线性的
组2:多个用户同时购买,但是提前将票分在不同的窗口中,换句话说每个窗口卖的票数之后等于总票数,如果其中一个窗口的票卖完了就得更换窗口买票(当然这得具体看你服务端的逻辑设计了,你也可以像其它窗口先挪一些票,但是票的总数是不变化的)
这其实很像Hashtable
与ConcurrentHashMap
的关系。
不过这两种的选择还得根据实际业务场景来啦,如果是卖火车票的话,第二种就不太好使。
当然如果你不是卖火车票的话其实第一种已经可以满足目前大多数卖票场景了。
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
并发的话,不是用队列来做吗?