2016-11-23 5 views
0

Railsクエリでデータベースから得られたリストをキャッシュするにはどうすればよいですか?Railsクエリでデータベースから得られたリストをキャッシュする方法

@total_untagged = Rails.cache.fetch("tags_controller/untagged/@total_untagged", expires_in: 1.hour) do 
     InventoryApi::BaseEntity\ 
      .joins(@object_type.to_sym) 
      .includes(:base_entities_tags) 
      .where({ base_entities_tags: { base_entity_id: nil }}) 
      .size.to_int 
     end 

このコードはInventoryApi :: BaseEntityモデルをロードし、キー値をキャッシュに保存されます。キャッシュされた結果は、データベースからレイジーロードされ、インスタンスである

tags_controller/untagged/@total_untagged 

フィールド値を持つクラスとして熱心に読み込まれません。

キャッシュが読み込まれると、キャッシュが読み取られると、データベースを再度読み取る必要があります。実際にはキャッシュされません。

データベースの関係ではなく、最終結果をキャッシュする方法はありますか?

答えて

0

キャッシュに保存されると、キャッシュが無効になるまでデータベースを再度読み取る必要はありません。あなたがこれをローカルで使用している場合は、ここで気をつけておくべきことがあります。これはhttp://guides.rubyonrails.org/caching_with_rails.htmlです。

ローカルあなたは、関連する設定/環境/ *。rbをtrueにconfig.action_controller.perform_caching設定することで、ローカル環境でキャッシュを有効にしたいと思うのキャッシングで遊ぶために。

config.action_controller.perform_cachingの値を変更すると、Action Controllerコンポーネントによって提供されるキャッシングにのみ影響します。たとえば、低レベルのキャッシュには影響しません。

+0

回答ありがとうございますが、私の質問はそれに関するものではありません。私はかつてキャッシュに保存されていることを知っている必要はありませんが、データベースに戻って、私が欲しいものですが、beeingキャッシュされているデータ自体ではなく、データベースローダーので、データベースから再度ロードされ、私が避けたいと思っていることは素晴らしいものです。 私は既に設定ファイルを変更しました。キャッシュは保存されて使用されていますが、私が言ったように、保存されているものは私が必要としているものではありません。 –

+0

これが当てはまる場合は、データベースから受け取った正確な結果を、関係の代わりにフェッチしてキャッシュしないのはなぜですか。 – VishalTheBeast

+0

私はそれを行う方法を尋ねています。これは私の質問です。 –

関連する問題