第一次尝试将缓存实际应用到应用程序中,我发现它确实令人困惑。即使在阅读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的?
答案 0 :(得分:0)
低级缓存可行,但我相信这存在于内存中,并且不会持久存在。如果您不想一直将其保留在内存中,那么下一个要做的最好的事情就是将其写入磁盘,然后只要提出请求就提供此缓存文件。
为此,您需要将action_caching gem添加到Gemfile中(仅适用于Rails 4.0及更高版本):
gem 'actionpack-action_caching'
然后将以下内容添加到您的控制器:
caches_action :get_champion
就是这样。现在,第一次发出请求时,它将执行完整请求并将其输出到缓存文件。后续请求将只检索缓存文件。
有关详细信息,请参阅https://github.com/rails/actionpack-action_caching。