6

它会处理两个人更新问题吗?

我用谷歌搜索并查看了 api 但什么也没找到

Rails 3+,红宝石 1.9.3

4

3 回答 3

4

使用 counter_cache 时,记录插入和计数器更新在同一个事务中完成。但这并不能保证操作的原子性。除了避免两个人更新问题之外,您可能还必须“锁定”您的记录。

请参阅这篇出色的文章。这是关于 redis-objects gem,但前两部分完美地解释了 ActiveRecord 的问题和解决方案。

于 2013-10-01T21:47:58.997 回答
2

简短的回答:没有。正如 Cédric 所提到的,Rails 会更新counter_cache事务的内部,因此如果您说有一个更新同一记录的后台进程,您会发现自己遇到死锁错误,除非您使用with_lock记录上的块运行这两个更新。

于 2015-03-13T03:23:08.197 回答
0

至少对于 Rails 5.x,给定的答案似乎并不正确,因为它将执行原子的 SQL UPDATE。

UPDATE .... SET counter = counter + 1
于 2019-04-22T14:59:26.730 回答