2010-01-14 2 views
3

Я написал сценарий, который получает текущие ставки по обменному курсу по сравнению с долларом каждый час (валюта моей продукции по умолчанию).Где и как хранить курсы валют?

Пользователь может установить свою валюту в своих настройках и хранить в пользовательской таблице.

Моя первоначальная идея состояла в том, чтобы хранить все курсы валют в базе данных, а затем, когда пользователь регистрирует в памяти код валюты и курс в своей сессии. Затем вокруг каждой цены у меня есть функция, которая умножает цену на скорость пользователя и добавляет код валюты в конец.

Мое единственное беспокойство заключается в том, что переменная сеанса может существовать на какое-то время и потенциально может сделать цену совершенно неправильной.

Вместо того, чтобы хранить ставки в сеансе, должен ли я просто хранить их код валюты и хранить ставки в таблице памяти или в файловой системе для быстрого доступа и получить доступ к функции преобразования цены? Таким образом, цены такие же современные, как и цены.

Как это обычно достигается?

ответ

7

Не могли бы вы вместо этого показать цены в валюте, в которой они находятся, и показать приблизительно цене в выбранной валюте, с предупреждением, что фактическая ставка может отличаться в зависимости от времени их оформления заказа?

+0

Да, я подумал об этом. Я могу сохранить это просто, тогда тоже ... на самом деле не имеет значения, обновлялись ли ставки один раз в день. – Mark

+0

Я, конечно, видел такой подход, применяемый в некоторых интернет-магазинах, которые я просматривал, поэтому есть прецедент. –

+0

Вот как это работает, например, ebay. –

0

Вы можете изменить время жизни сеанса по умолчанию - оно хранится в переменной php.ini session.gc_maxlifetime. По умолчанию 1440 (24 часа), после чего сеанс будет очищен следующей сборкой мусора.

переменной можно редактировать непосредственно (в файле) или с ini_set:

ini_set('session.gc_maxlifetime', 60); // set to 1 hour 

Редактировать

Вы можете увеличить вероятность сбора мусора работает на любой вызов, используя переменные session.gc_probability и session.gc_divisor. Документация находится на http://www.php.net/manual/en/session.configuration.php

0

Позволяет сделать предмет опасности.

Можно ли использовать $ _SERVER в качестве глобального объекта приложения, аналогичного объекту приложения ASP? Если нет, есть ли объект приложения PHP?

Если да, то вы могли бы хранить курс валюты в $ _SERVER, а затем обновить его, когда это необходимо (например, когда Paypal обновляет это валютный курс)

2

Просто кэшировать вызовы, которые получают Курсы валют от PayPal. Это все, что нужно сделать. Пока кеш не устарел, ваши пользователи будут умножаться на кешированные значения. Если кеш будет устаревать, будет получен новый тариф, например. (искусственный код)

$currency = 'usd'; 
if (!$cache->has("exRate-$currency")) { 
    $exRate = ForEx::find($currency); 
    $cache->save("exRate-$currency"); 
} else { 
    $exRate = $cache->get("exRate-$currency"); 
} 
CurrencyConverter::setRate($currency, $exRate); 
CurrencyConverter::convert(100, 'eur', 'usd'); 

Для кэшей использовать APC или memcached.

+0

Благодарим вас за ввод. Я думаю, что это хорошее решение. Я не реализовал кеш в данный момент ... когда я это сделаю, я оглянусь назад на это решение. – Mark

Смежные вопросы