【发布时间】:2017-10-04 21:44:42
【问题描述】:
在我的 Rails 应用程序中,我有一个非常昂贵的函数,它每天一次从外部服务获取一堆转化率:
require 'open-uri'
module Currency
def self.all
@all ||= fetch_all
end
def self.get_rate(from_curr = "EUR", to_curr = "USD")
all[from_curr][to_curr]
end
private
def self.fetch_all
hashes = {}
CURRENCIES.keys.each do |currency|
hash = JSON.parse(open(URI("http://api.fixer.io/latest?base=#{currency}")).read)
hashes[currency] = hash["rates"]
end
hashes
end
end
有没有办法存储这个函数的结果(哈希)来加快速度?现在,我正在尝试将它存储在一个实例变量@all 中,这会稍微加快它的速度,但是它不会在请求之间保持不变。如何在请求中保留它?
【问题讨论】:
-
你使用缓存服务器吗?
-
@Md.FarhanMemon:不,我不这么认为。
-
为什么不将汇率存储在数据库中?
-
@Tintin81 在数据库中记录历史汇率日志将是 IMO 的最大优势。
-
从概念上讲,常量不是存储值的最佳位置,如果它经常更改就不再是常量。我会同意 spickermann 并将其保存到数据库中是最好的选择。
标签: ruby-on-rails ruby activerecord memoization