6

問題を更新する2人の問題を処理しますか?

私はグーグルでAPIを調べましたが、何も見つかりませんでした

Rails 3+、Ruby 1.9.3

4

3 に答える 3

4

counter_cacheを使用する場合、レコードの挿入とカウンターの更新は同じトランザクションで実行されます。ただし、これは操作の原子性を保証するものではありません。2人の更新の問題を回避するために、レコードを「ロック」する必要がある場合があります。

この優れた記事を参照してください。これはredis-objectsgemに関するものですが、最初の2つの部分では、ActiveRecordの問題と解決策を完全に説明しています。

于 2013-10-01T21:47:58.997 に答える
2

簡単な答え:いいえ。Cédricが言及しているように、Railsはトランザクションの内部を更新するため、同じレコードを更新するバックグラウンドプロセスがある場合、レコードのブロックをcounter_cache使用して両方の更新を実行しない限り、デッドロックエラーが発生します。with_lock

于 2015-03-13T03:23:08.197 に答える
0

与えられた答えは、アトミックなSQL UPDATEを実行するため、少なくともRails5.xでは正しくないようです。

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