ActiveRecordクラス "User"があるとします。RailsがActiverecordクラス属性をロード/キャッシュしていることをどのように知ることができますか?
私はUser.newを使って初めて使用することを認識しています.Railsはデータベースの呼び出しを行い、ユーザーの実際の属性をusersテーブルから取得します。その後、キャッシュされ、データベース呼び出しは必要ありません。
これは単スレッドでは問題ありません。
複数のスレッドを1つのプロセスで実行しているとします。 User.newを呼び出す最初のスレッド(またはUserを含むものなど)は、データベース内の属性を検索します。後続のものはキャッシュされます。
ActiveRecord属性がキャッシュされているかどうかを確認する方法はありますか?
データベース接続の使用を計画していないときに、User.newを呼び出すと、常にActiveRecord :: Base.connection_pool.with_connectionを介してデータベース接続をチェックアウトする必要はありません。それを保存します。
u = nil
ActiveRecord::Base.connection_pool.with_connection do # I don't want to checkout a conn if User attributes are cached.
u = User.new
end
#manipulation of u. but u.save NEVER ever gets called.
私は推論全体を完全には説明しませんが、そうすることで人々は答えることができなくなります。興味があれば私の問題に似た記事があります:https://bibwild.wordpress.com/2014/07/17/activerecord-concurrency-in-rails4-avoid-leaked-connections/私は基本的にデータベース接続を可能な限りチェックアウトしたくはありませんが、User.newを操作して操作しますが、保存はしません。