【问题标题】:Ruby on Rails - how to cache the result of a response of an API service?Ruby on Rails - 如何缓存 API 服务响应的结果?
【发布时间】:2012-07-03 17:15:23
【问题描述】:

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

最重要的是,它每次都会发出请求——每次访问者访问我的网站时,它都会调用flickr.com 的网络服务来获取照片列表。显然,我想将flickr 的响应缓存大约 5 个小时。就我而言,这已经足够了。

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

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

【问题讨论】:

    标签: ruby-on-rails api caching


    【解决方案1】:

    这取决于您希望缓存如何工作。通常,您对 memcached 或 redis 存储很满意。两者都在 heroku 上运行。

    查看缓存指南http://guides.rubyonrails.org/caching_with_rails.html

    【讨论】:

      【解决方案2】:

      Memcached 是一个不错的选择。 Heroku 有 it built-in for free (5mb)。设置指南可以找到here

      $ heroku addons:add memcache
      $ vim Gemfile
        gem 'dalli'
      $ vim config/environments/production.rb
        config.cache_store = :dalli_store
      $ heroku console
        Rails.cache.stats
      

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

      class Flickr
        def self.cached_request
          Rails.cache.fetch "photos", :expires_in => 5.minutes do
            flickr.photos.getRecent
          end
        end
      end
      

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

      Flickr.cached_request
      

      它将触发 API 请求并将它们缓存 5 分钟。

      【讨论】:

      • 看起来很有用。非常感谢。
      • 不完全。你建议我使用 5 分钟的过期时间吗?我将为此使用大约 5-10 小时,这样会好吗?只是你的意见。
      • @AlexMaslakov 这取决于服务器容量和图片更改频率。 5 分钟适用于新闻源和不断变化的数据,但 5-10 小时应该适合照片流
      • Heroku 不再支持 memcache 插件。来自@HerokuAddonsThis tweet 建议改用MemCachier。它是可用空间的 5 倍的直接替代品。要添加 MemCachier,请运行 heroku addons:add memcachier:dev
      猜你喜欢
      • 2014-05-05
      • 2016-05-04
      • 1970-01-01
      • 2011-08-28
      • 2012-09-24
      • 2016-02-24
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      相关资源
      最近更新 更多