Ruby on Rails - 如何缓存API服务响应的结果?

Ale*_*dre 4 api caching ruby-on-rails

我有一个RoR 3.2.3网站.它调用Web服务flickr.com来获取我的照片列表.但这并不重要.

最重要的是,它每次都会提出请求 - 每次访问者访问我的网站时,它都会调用Web服务flickr.com来获取照片列表.显然我想缓存flickr大约5个小时的休息时间.就我而言,这就足够了.

那我该怎么办呢?什么是好的或最好的方式或只是一般的方法?也许你有一个如何制作它的链接?

PS我使用支持数据库的5Mb 免费资费计划.但是,如果有必要,我可以迁移到其他主机.heroku.comPostgreSQL

Ana*_*oly 13

Memcached是一个很好的选择.Heroku 免费内置(5mb).可以在此处找到设置指南

$ heroku addons:add memcache
$ vim Gemfile
  gem 'dalli'
$ vim config/environments/production.rb
  config.cache_store = :dalli_store
$ heroku console
  Rails.cache.stats
Run Code Online (Sandbox Code Playgroud)

然后,您可以将昂贵的API请求包装到Rails.cache块中,请参阅以下代码:

class Flickr
  def self.cached_request
    Rails.cache.fetch "photos", :expires_in => 5.minutes do
      flickr.photos.getRecent
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

然后要使用缓存,只需运行即可

Flickr.cached_request
Run Code Online (Sandbox Code Playgroud)

它将触发API请求并将其缓存5分钟.

  • Heroku不再支持memcache附加组件.来自[@HerokuAddons](https://twitter.com/HerokuAddons)的[推文](https://twitter.com/HerokuAddons/status/306108405670612993)建议使用[MemCachier](https://addons.heroku.com/memcachier)而不是.它是免费空间的5倍替代品.要添加MemCachier,请运行`heroku addons:add memcachier:dev`. (4认同)