我正在开发一个java (spring/hibernate)应用程序,它是一种定时和数量有限的销售平台.i.e,我只能在上午10am-11am的时间段销售1000张一种类型的卡我在大约3秒内收到了大约15万个请求,最终我卖出了1000多张卡,有时是1150张,有时是1300张。反过来,它又会导致销售超过指定限制的商品。
我认为我的程序不能处理并发,即使我在我的函数上指定了事务约束。如何限制并确保每个请求都从MySQL表中读取最新状态,并且不违反数量限制。
代码结构:
@Transactional (propagation = Propagation.REQUIRED, isolation = Isolation.SERIALIZABLE) FUNCTION() {
1.//check limit from DB();
2. //if limit is not breached, insert new item into the transaction table;
3. //Update user profile;
}发布于 2018-01-22 13:49:31
实现这一目标的方法有很多,但这完全取决于数据库检查和更新所需的时间以及运行应用程序的JVM数量。如果只有一个JVM,并且您的事务足够快,那么您始终可以同步顶级调用。其他方法是使用原子锁。
如果涉及多个JVM,您可以使用更高级的锁定机制,比如Hazelcast IMDG提供的机制。
我对MySql不太确定,但在Oracle中,您也可以很容易地在数据库级别锁定一个进程。如您所见,有很多选项:-)
https://stackoverflow.com/questions/48375093
复制相似问题