我们有一个由spring框架支持的web应用程序,它向用户显示记录列表。我们有一个要求,在这里,我们想限制单个记录被两个用户同时操作。i、 如果多个用户试图对同一条记录进行操作,那么请求先处理哪个操作的用户rest all应该无法处理它。
我们已经研究了锁定技术(乐观锁定),但不确定这是实现此功能的正确方法还是唯一方法。
此外,如果乐观锁定是正确的方法,那么任何指向该方向的指针都是值得赞赏的。
我们有一个由spring框架支持的web应用程序,它向用户显示记录列表。我们有一个要求,在这里,我们想限制单个记录被两个用户同时操作。i、 如果多个用户试图对同一条记录进行操作,那么请求先处理哪个操作的用户rest all应该无法处理它。
我们已经研究了锁定技术(乐观锁定),但不确定这是实现此功能的正确方法还是唯一方法。
此外,如果乐观锁定是正确的方法,那么任何指向该方向的指针都是值得赞赏的。
1条答案
按热度按时间sqxo8psd1#
乐观锁定确实是解决这个问题的常用技术,它完全符合您的要求:如果多个用户希望同时执行冲突操作,则只有第一个这样的操作成功,而所有其他操作都被拒绝。将此与通知其他用户他们的请求失败(因为其他用户更快)相结合,并给他们查看其他用户所做操作的选项,允许他们协调更改,并在必要时重试。
乐观锁定的优点是,它只在发生实际冲突时才启动。如果冲突很少,这是最佳的,这就是为什么这种技术被称为“乐观”锁定。
乐观锁定的缺点是在发生冲突时丢弃用户工作。如果冲突频繁,并且提交的工作意义重大,那么简单地丢弃该工作可能太浪费了。此外,有时这项工作除了必须更新一次数据库之外,还会产生副作用。例如,这项工作可能涉及发送一封信或电子邮件,在乐观锁定失败的情况下无法收回。
在这些情况下,您将希望防止用户开始有冲突的工作,而不是等到他们希望保存他们的工作。这通常是通过允许用户在开始实际工作之前在应用程序级别获得问题的所有权来实现的。再加上确保只有一个用户可以同时拥有所有权(通过乐观锁定),这可以防止冲突的工作被启动。这种技术的缺点是,即使没有冲突,用户也需要采取额外的操作,因此对于冲突代价高昂或频繁的情况,这种方法会进行优化。
至于如何使用乐观锁定,网上有很多很好的教程。我首先要检查spring的参考手册和您使用的jpa实现。