【发布时间】:2019-08-27 22:02:15
【问题描述】:
系统上3个用户同时点击买票。
型号
class TicketInventory < ActiveRecord::Base
serialize :ticket_roll, Array
end
ticket_roll 以一系列数字为种子
控制器
ticket_inventory = TicketInventory.find(1)
ticket_roll = ticket_inventory.ticket_roll
TicketInventory.transaction do
@ticket = ticket_roll.pop
ticket_inventory.save
end
他们都得到同一张票。
我考虑过lock_version,但这会引发错误,而不是提供下一张票。
我还查看了索引,但这需要每张票有一行。
如何避免这种竞争条件?
【问题讨论】:
-
如果你使用乐观锁定(即lock_version)你只需要挽救错误并重试
标签: ruby-on-rails arrays concurrency locking race-condition