Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在rails应用程序中缓存对外部API的调用_Ruby On Rails_Api_Caching - Fatal编程技术网

Ruby on rails 在rails应用程序中缓存对外部API的调用

Ruby on rails 在rails应用程序中缓存对外部API的调用,ruby-on-rails,api,caching,Ruby On Rails,Api,Caching,rails应用程序(4)使用HTTParty调用外部API。API是只读的。缓存是必需的,因为数据不会经常更改(24小时),并且API每小时只允许有限数量的调用 我想我需要某种基于哈希的缓存,在这里我将使用“params/sent/to/the/api”作为键。 用于缓存的Rails工具似乎只用于页面、片段或SQL 如何缓存对外部API的调用?应该是这样的。基本上,Rails.cache.fetch调用将包装您的API调用。除非缓存已过期,否则它不会命中API class Results

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

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


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

应该是这样的。基本上,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,也不复杂。这是一个安装和运行非常简单的服务。