gpt4 book ai didi

ruby-on-rails-3 - 多个客户端请求之间的 Rails API 中的互斥锁

转载 作者:行者123 更新时间:2023-12-03 23:38:05 24 4
gpt4 key购买 nike

我在 Rails API 中遇到互斥问题。我的数据库中有一些 Event 对象,其中包含将参加该事件的人数。

考虑我的事件方法,该方法将一个人添加到事件中:

class Event
def add_person
nb = self.number_of_person + 1
# Some stuff
self.number_of_person = nb
self.save
end
end

现在,假设客户 A 和 B 想参加事件 E。Rails 将收到 2 个请求,并将并行调用 add_person 方法。最后,事件E中的人数有可能不是加2,而是加1。

这就是我想要做的:

Client A                 | Client B                 | Possible in parallel
--------------------------------------------------------------------------
Event.find(1).show | Event.find(1).show | yes
Event.find(1).add_person | Event.find(1).add_person | no
Event.find(1).add_person | Event.find(2).add_person | yes

我只想对同一对象的 add_person 方法进行排队。

有办法吗?

最佳答案

标准的 ActiveRecord 事务将防止死锁或其他争用。您可能必须使用 pessimistic locking strategy .数据库就是为了防止这种事情而设计的。

关于ruby-on-rails-3 - 多个客户端请求之间的 Rails API 中的互斥锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13056737/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com