我正在阅读使用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
答案 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)