1

Rails 3.2.8 での開発では、このような CACHE から多くの行を取得します。

CACHE (0.0ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" IN (1, 7)

Rails がパフォーマンスを向上させるためにクエリをキャッシュしていることは知っています。すべてのキャッシング行は 0.0 ミリ秒で完了します。だから、それは問題ではないかもしれません。

質問

コード/設計を改善して、可能な限り多くのキャッシュを取り除く必要がありますか? パフォーマンスが向上しますか?

4

1 に答える 1

3

通常、キャッシュはアプリケーションのパフォーマンスを低下させるのではなく、改善します。デフォルトでは、単一のリクエスト内で、まったく同じクエリが 1 回だけ実行され、残りの時間は結果がキャッシュされます。これは、CACHE ログ エントリで観察しているものです。

ただし、これは、アプリケーションがまったく同じクエリを複数回実行しようとすることを意味します。そうです、モデルのどの部分が繰り返し要求されているかを調べ、具体化された.all結果を保持し、モデルをクエリする代わりにパラメーターとして渡すことをお勧めします。

もちろん、より正確な答えは特定のシナリオによって異なりますが、あなたの本能は正しいです。多くのキャッシュヒットは、おそらく少し改善できる設計を示唆しています。

もう一度注意してください: クエリが非キャッシュで実行されるようにする場合は、次のように非キャッシュ メソッドでラップします。

  ActiveRecord::Base.uncached do
    # your code here   
  end
于 2012-11-19T09:34:10.870 に答える