ruby-on-rails - Rails:使用 Typhoeus 缓存 API 请求
问题描述
如何在 Rails 中使用 Typhoeus gem 缓存 api 请求?在尝试了 2 小时后,我放弃了自己尝试做这件事。
我有以下代码:
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 处理程序。”
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
但我不明白该把这段代码放在哪里。
解决方案
创建一个初始化程序来设置缓存。类似于:(config/initializers/typhoeus.rb)
redis = Redis.new(url: "your redis url")
Typhoeus::Config.cache = Typhoeus::Cache::Redis.new(redis, default_ttl: 60)
然后在您的请求中,您可以添加缓存相关选项。
request = Typhoeus::Request.new(url,
method: method,
params: params,
body: body,
headers: request_headers,
cache_ttl: 10,
cache_key: "unique_key")
request.run
ttl 以秒为单位。Typhoeus cache_key 默认为:
Digest::SHA1.hexdigest "#{self.class.name}#{base_url}#{hashable_string_for(options)}"
他们没有记录。您必须查看源才能弄清楚。
可能没问题,但是如果您愿意,我将演示如何设置您自己的。
如果您想在不使用缓存传递缓存的情况下发出请求:选项中的 false 因为缓存将默认为所有请求启用。
推荐阅读
- sql - 使用内部联接 (VBA) 对动态表执行动态查询时出错
- ggplot2 - ggplot2中各组百分比的条形图
- javascript - 使用@testing-library/react 对 react-router 的链接进行最简单的测试
- node.js - GSAP 无法在 node/express/ejs 项目中使用 NPM
- flutter - 是否可以在 Flutter 中不添加 Android 插件的情况下使用 PlatformView?
- javascript - 在 Puppeteer 中执行 JavaScript
- sql - 如何从sql中的逗号分隔字符串中删除_符号后的值?
- ios - 呈现 UIViewController 时 SafeAreas 行为不端
- python - 从文件名中提取日期并添加为列
- react-native - React Native AsyncStorage.getItem 不起作用。({“_40”:0,“_55”:空,“_65”:0,“_72”:空})