这听起来像是使用 memcached 或 redis 的一个很好的论据。您需要一个集中的地方,这些值可以存放在您的所有应用程序服务器池中。您的用例主要通过偶尔写入来更新值来读取。
我将构建一个货币助手,每次请求从 memcached/redis 延迟加载一次,然后保存货币汇率数据以用于该请求中的任何价值计算。
我不知道您的问题域,但我们假设您正在尝试向系统中的不同用户提供本地货币定价,并且不同用户的费率不同(即:折扣等)。
class CurrencyHelper
attr_reader :currency_rates
def initialize(user_id)
@currency_rates = load_or_generate_exchange_rates
end
def load_or_generate_exchange_rates
key = "/currency/rates/#{user_id}"
REDIS.get(key) || begin
rates = generate_exchange_rates
REDIS.put(key, rates)
rates
end
end
def convert_from_usd_to(amount_usd, currency)
round_money( usd * currency_rates[currency] )
end
end
在您的控制器代码中:
def currency_helper
@currency_helper ||= CurrencyHelper.new(current_user.id)
end
def show
localized_price = currency_helper.convert_from_usd_to(price_usd, params[:country_code])
end