应用锁是我个人起的名字,我想表达的意思是:
好了,出现问题了,对 A 来说它是按正常程序关闭订单,对于 B 来说它是按正常程序付款,可是最终的结果却是关闭了已付款订单。
所以我们就得用事务与锁来解决问题。
我们强制为第 1 步增加一个更厉害的锁,让执行顺序变成 1、3、2。有人说,这不一样么?只不过之前是关闭了已付款订单,现在是对已关闭订单付了款。
那就在付款前再读取一次订单,看看是不是已经关闭,已经关闭就不付款。
这种看似解决了,但实际带来几个问题:
有一种处理方法就是我说的应用锁,个人起的名字,其实跟“锁”没半毛钱关系,只是实现类似功能。
就是增加一个 timestamp 类型的列,每当记录更新,这个列的值都会自动增加,我们只需要判断这个列的值有没有变化,就知道这前后有没有其他人来更新了。
相关阅读