これは、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