如何进行低级缓存?缓存密钥

时间:2015-10-31 20:07:30

标签: ruby-on-rails ruby-on-rails-4 caching

我想在我的应用程序上实现低级缓存,但是我在文档后面遇到了一些麻烦。这就是他们的例子:

class Product < ActiveRecord::Base
  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 ?应该通过rails cache以某种方式给出,还是我应该预先构建密钥?

  • 我不确定我是否清楚地了解这是如何工作的,确认这个逻辑是否正确:我在我的控制器上设置了这个例子以生成大量变量。然后每次请求变量时(例如从视图中),控制器而不是每次重新计算它(长查询)将检索预先制作的查询,以防密钥没有改变。如果密钥已更改,它将再次重新计算缓存块内的所有变量。

1 个答案:

答案 0 :(得分:0)

ActiveRecord::Integration包含Rails 4中的cache_key方法。默认情况下,它应包含在标准Rails配置中。要对此进行测试,请弹出打开控制台,获取记录并在其上调用cache_key

有关该方法的参考资料here

它通常会生成类似于"#{record.class.name.underscore}/#{record.to_param}-#{record.updated_at}"的字符串。这种基于密钥的失效方法可以让您通过根据记录上次更新时查找缓存值来避免大量工作。旧缓存值将被忽略,因为它们未被检索。

DHH写了一篇关于here主题的精彩文章。