我在Sidekiq中有两个线程的并发性,并且我在一个模型中调用了以下方法:
def update_pending
update(pending_stats: self.pending_stats + 1)
end
我希望当两个作业完成时,pending_stats属性为2,但它只是一个,即使两个线程都调用该方法。
如何确保两个线程实际使用正确的值更新?
答案 0 :(得分:2)
尝试使用increment_counter这是一个原子操作。
def update_pending increment_counter(:pending_status, 1) end
这将执行以下SQL:
UPDATE ... SET pending_status = COALESCE(pending_status, 0) + 1 WHERE ...