悲观锁定如何跨 Rails 中的请求工作?
How does pessimistic locking work across requests in Rails?
如果用户正在使用悲观锁编辑资源,则在编辑用户保存更改之前,其他人无法编辑该资源。现在我的问题是,当编辑用户没有保存他的更改而是点击浏览器后退按钮进入最后一个视图时会发生什么?资源是否仍处于锁定状态或锁定解除?同样的问题适用于编辑用户在编辑视图上然后通过导航栏中的链接导航到另一个视图的场景。用户是否需要返回到特定资源的编辑视图并在解除锁定之前保存更改?如果是,当通过保存按钮以外的其他按钮退出编辑视图时,如何解除锁定?
通常在Rails中实现悲观锁,即使用ActiveRecord::Locking::Pessimistic
在数据库事务期间获取对数据的锁定。因此,锁定是在单个 Web 请求期间获得和释放的,不会在多个请求(例如应用程序中的向导或多步骤过程)中产生。这有助于确保更新相同资源的并发请求不会产生不一致的数据。
如果您需要对多个请求持有锁,则需要以其他不依赖于打开的数据库事务的方式来实现。
具体回答你的问题:当用户在浏览器中编辑数据时,悲观锁不会被持有。当用户将他们的更改发送到服务器并在之后发布时获得。因此,如果用户单击后退按钮或不发送任何更改,则锁定不受影响,因为此时没有锁定。
如果用户正在使用悲观锁编辑资源,则在编辑用户保存更改之前,其他人无法编辑该资源。现在我的问题是,当编辑用户没有保存他的更改而是点击浏览器后退按钮进入最后一个视图时会发生什么?资源是否仍处于锁定状态或锁定解除?同样的问题适用于编辑用户在编辑视图上然后通过导航栏中的链接导航到另一个视图的场景。用户是否需要返回到特定资源的编辑视图并在解除锁定之前保存更改?如果是,当通过保存按钮以外的其他按钮退出编辑视图时,如何解除锁定?
通常在Rails中实现悲观锁,即使用ActiveRecord::Locking::Pessimistic
在数据库事务期间获取对数据的锁定。因此,锁定是在单个 Web 请求期间获得和释放的,不会在多个请求(例如应用程序中的向导或多步骤过程)中产生。这有助于确保更新相同资源的并发请求不会产生不一致的数据。
如果您需要对多个请求持有锁,则需要以其他不依赖于打开的数据库事务的方式来实现。
具体回答你的问题:当用户在浏览器中编辑数据时,悲观锁不会被持有。当用户将他们的更改发送到服务器并在之后发布时获得。因此,如果用户单击后退按钮或不发送任何更改,则锁定不受影响,因为此时没有锁定。