rails中的低级缓存密钥。内置?

时间:2016-05-03 13:57:40

标签: ruby-on-rails caching

我正在阅读使用Rails缓存的文档,我遇到了这个:

  

考虑以下示例。应用程序具有产品型号   使用实例方法查找产品的价格   竞争网站。这种方法返回的数据是完美的   用于低级缓存:

     

类产品< 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方法,所以   cache-key就像是   产品/ 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

1 个答案:

答案 0 :(得分: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)