2016-05-03 9 views
0

私はRailsのでキャッシングのためのドキュメントを読んでいると私はこの出くわした:低レベルキャッシュキー(レール)。内蔵ですか?

は、次の例を考えてみましょう。アプリケーションには、 の競合Webサイトで製品の価格を検索するインスタンスメソッドを持つProductモデル があります。このメソッドによって返されるデータは、低レベルのキャッシングのための 完璧になる:

クラスの製品< ApplicationRecord

def competing_price 
>  Rails.cache.fetch("#{cache_key}/competing_price", expires_in: 12.hours) do 
>  Competitor::API.find_price(id) 
>  end end end 

この例では、我々はcache_keyメソッドを使用していることに注意してください、そう キャッシュ-keyは products/233-20140225082222765838000/competing_priceのようなものになります。 cache_key は、モデルのid属性とupdated_at属性に基づいて文字列を生成します。 これは一般的な規約であり、製品が更新されるたびに キャッシュを無効にするという利点があります。一般に、インスタンスレベルの情報に 低レベルキャッシングを使用する場合は、 キャッシュキーを生成する必要があります。

cache_keyメソッドをビルドする必要がありますか、それとも組み込まれていますか?

module ProductsHelper 
    def cache_key_for_products 
    count   = Product.count 
    max_updated_at = Product.maximum(:updated_at).try(:utc).try(:to_s, :number) 
    "products/all-#{count}-#{max_updated_at}" 
    end 
end 

答えて

0

キャッシュキーを指定し、キャッシュを無効にする必要がある場合は、キャッシュキーを設定して再構成できるようにする必要があります。後で

cache_key = "#{account.id}-#{user.id}-#{product.id}" 
Rails.cache.fetch("#{cache_key}/competing_price", expires_in: 12.hours) do 
    Competitor::API.find_price(id) 
end 

...

製品が完売または削除された場合、あなたは同じcache_keyを介してキャッシュを無効にすることができる:例えば

Rails.cache.delete(cache_key) 
関連する問題