ActiveRecord的lock老大说只是一个数据库锁,并不是线程锁
如 account.balance -= amount 要写成
Account.transition do
account.with_lock do
account.balance -= amount
account.save!
end
end
Account.transition do
account.lock!
account.balance -= amount
account.save!
end
加事务的目的是如果中途出错, 账户变动会回滚
加数据锁的目的是防止多个线程同时修改