第一次尝试在Rails中缓存,甚至不知道从哪里开始

时间:2015-07-16 23:00:19

标签: ruby-on-rails caching

第一次尝试将缓存实际应用到应用程序中,我发现它确实令人困惑。即使在阅读this indept article之后 ,我还很迷茫。

我决定开始简单。在我正在制作的测试应用中,我有以下的API调用。

def get_champion
        champion_url = "#{BASE_URL}/api/lol/static-data/na/v1.2/champion#{API_KEY}"
        parse_json(champion_url)
    end

我认为这是我缓存的最佳位置,因为从此调用返回的数据始终是静态的。

我在这里缓存的最佳方法是什么?文章中描述了很多缓存技术,我不知道哪一个真正使用。

如果您认为我应该尝试实施某种技术,请告诉我,我会尽力实施。

PS:现在,服务器日志说明了

Completed 200 OK in 2860ms (Views: 2858.6ms | ActiveRecord: 0.3ms)

这真的很高,现在呢?

编辑:在阅读rails doc之后,我认为低级缓存可能适合此场景。

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。他们是如何生成cache_key的?

1 个答案:

答案 0 :(得分:0)

低级缓存可行,但我相信这存在于内存中,并且不会持久存在。如果您不想一直将其保留在内存中,那么下一个要做的最好的事情就是将其写入磁盘,然后只要提出请求就提供此缓存文件。

为此,您需要将action_caching gem添加到Gemfile中(仅适用于Rails 4.0及更高版本):

gem 'actionpack-action_caching'

然后将以下内容添加到您的控制器:

caches_action :get_champion

就是这样。现在,第一次发出请求时,它将执行完整请求并将其输出到缓存文件。后续请求将只检索缓存文件。

有关详细信息,请参阅https://github.com/rails/actionpack-action_caching