【问题标题】:Caching calls to an external API in a rails app在 Rails 应用程序中缓存对外部 API 的调用
【发布时间】:2013-11-18 04:25:28
【问题描述】:

rails 应用程序 (4) 使用 HTTParty 调用外部 API。 API 是只读的。需要缓存,因为数据不会经常更改(24 小时),并且 API 每小时只允许有限数量的调用。

我想我需要某种基于哈希的缓存,我将使用“params/sent/to/the/api”作为键。 用于缓存的 Rails 工具似乎只适用于页面、片段或 SQL。

如何缓存对外部 API 的调用?

【问题讨论】:

    标签: ruby-on-rails api caching


    【解决方案1】:

    会是这样的。基本上,Rails.cache.fetch 调用将包装您的 API 调用。除非缓存过期,否则它不会访问 API。

    class Results
    
      def get(url, params)
        Rails.cache.fetch([url, params], :expires => 1.hour) do
          HTTParty.get('url/to/api')
        end
      end
    
    end
    

    确保在您的环境中设置了缓存。 Memcache 非常适合这类事情。

    【讨论】:

    • 为最多有 5000 个条目的缓存安装服务器是不是太过分了?
    • 运行 memcache 很容易,但为了简单起见,您可以使用几种不同的方式缓存 - 文件服务器可能是您想要的。我对文件缓存的工作并不多,不知道 expires 在那里是如何工作的。
    • @Syl 正如 Swards 指出的那样,不需要单独的缓存服务器,但即使选择使用 memcached,它也并不复杂。这是一个安装和运行非常简单的服务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 2021-12-05
    • 2011-07-24
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    相关资源
    最近更新 更多