モデルの結果を次のようにキャッシュしています (Memcached を使用):
Rails.cache.fetch('Store.all') { Store.all }
後で、特定の都市の店舗など、Store.all のサブセットを取得したいと考えています。既にキャッシュされているストアのセットをクエリする簡単な方法はありますか? または、クエリごとにデータベースに再度アクセスする必要がありますか?
ありがとう!
モデルの結果を次のようにキャッシュしています (Memcached を使用):
Rails.cache.fetch('Store.all') { Store.all }
後で、特定の都市の店舗など、Store.all のサブセットを取得したいと考えています。既にキャッシュされているストアのセットをクエリする簡単な方法はありますか? または、クエリごとにデータベースに再度アクセスする必要がありますか?
ありがとう!
データベースは、任意の条件に一致するクエリを実行するように最適化されており、キャッシュ ストアは、既知のキーがあれば高速なルックアップにすぎないことを覚えておいてください。すでにフィルタリングまたは準備したものに対してのみキャッシュを使用する必要があります。
cities/1/stores
都市 1 のすべての店舗のようなキャッシュ キーを想定すると、このコレクションをキャッシュして、後で再度フェッチすることができます。
多数のストアがある場合Store.all
、1 つのキャッシュ キーとしてキャッシュしてから、特定の都市またはその他の基準で ruby を使用してフィルタリングしようとするのは最適化に反します。配列には のインデックスがないため、プログラムはすべての都市を反復処理する必要がありますcity_id
。データベースに「where」句を使用してこの作業を行わせ、データベースが提供するインデックス作成機能を使用する方がはるかに優れています。
ルビーでできます。まず、キャッシュから結果を取得し、コレクションを反復処理して特定の都市の店舗を見つけます。memcached を使用していると仮定すると、memcached は単純なキーと値のストアであるため、クエリを実行する簡単な方法はありません。