首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails:使用Typhoeus缓存API请求

Rails:使用Typhoeus缓存API请求
EN

Stack Overflow用户
提问于 2021-04-30 15:27:29
回答 2查看 123关注 0票数 1

如何在Rails中缓存带有Typhoeus gem的api请求?在尝试了2次horus之后,我放弃了自己尝试。

我有以下代码:

代码语言:javascript
复制
            hydra = Typhoeus::Hydra.new
            requests = urls.map do |url|
                request = Typhoeus::Request.new(url, followlocation: true)
                hydra.queue(request)
                request
            end
            hydra.run

他们的文档中写道:"Typhoeus包含对缓存的内置支持。在下面的示例中,如果存在缓存命中,则将缓存的对象传递给请求对象的on_complete处理程序。“

代码语言:javascript
复制
class Cache
  def initialize
    @memory = {}
  end

  def get(request)
    @memory[request]
  end

  def set(request, response)
    @memory[request] = response
  end
end

Typhoeus::Config.cache = Cache.new

Typhoeus.get("www.example.com").cached?
#=> false
Typhoeus.get("www.example.com").cached?
#=> true

但是我不知道把这段代码放在哪里。

EN

回答 2

Stack Overflow用户

发布于 2021-05-02 21:46:29

创建一个初始化器来设置缓存。类似于:(config/initializers/tytyeus.rb)

代码语言:javascript
复制
redis = Redis.new(url: "your redis url")
Typhoeus::Config.cache = Typhoeus::Cache::Redis.new(redis, default_ttl: 60)

然后,您可以在请求中添加与缓存相关的选项。

代码语言:javascript
复制
request = Typhoeus::Request.new(url,
                                method: method,
                                params: params,
                                body: body,
                                headers: request_headers,
                                cache_ttl: 10, 
                                cache_key: "unique_key")

request.run

ttl以秒为单位。默认情况下,台风cache_key为:

代码语言:javascript
复制
Digest::SHA1.hexdigest "#{self.class.name}#{base_url}#{hashable_string_for(options)}"

他们没有记录这一点。你必须看看它的来源才能找出答案。

这可能是好的,但我演示了如何设置您自己的,如果您想要上面。

如果你想在不使用缓存的情况下发出请求,在选项中传递cache: false,因为缓存现在对所有请求都是默认开启的。

票数 1
EN

Stack Overflow用户

发布于 2021-11-28 06:26:46

就像https://stackoverflow.com/users/215708/jacklin说的,对我来说最简单的选择是:

如前所述,在配置文件config/initializers/typhoeus.rb中使用所需的缓存middleware

  • Point
  1. 配置rails cache以使用rails缓存,如下所示

代码语言:javascript
复制
require 'typhoeus/cache/rails'
Typhoeus::Config.cache = Typhoeus::Cache::Rails.new

  1. 就是这样。Typhoeus::Request.new调用将被自动缓存。

旁注:如果使用Redis,response.body对象的类型是string,这是我在使用Rails缓存后发现的。因为您希望缓存响应并不断引用缓存,所以JSON.parse(response.body)应该给您一个哈希值。我相信这是红色的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67329880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档