2010-01-14 45 views
3

我寫了一個腳本,每小時獲得paypals與美元相比的當前匯率(我的產品默認使用的貨幣)。何處以及如何存儲貨幣匯率?

用戶可以在他們的設置中設置他們的貨幣,並存儲在用戶表中。

我最初的想法是將所有的貨幣匯率存儲在數據庫中,然後當用戶登錄時在他們的會話中存儲貨幣代碼和匯率。然後在每個價格附近,我有一個函數可以按用戶價格乘以價格並在最後附加貨幣代碼。

我唯一擔心的是會話變量可能存在一段時間,並有可能使價格完全錯誤。

我應該只存儲他們的貨幣代碼並將匯率存儲在內存表或文件系統中以便快速訪問並使價格轉換功能訪問它,而不是將匯率存儲在會話中。所以價格和利率一樣是最新的。

這通常如何實現?

回答

7

難道你不能用他們定價的貨幣來顯示價格,並且顯示大約價格用戶選擇的貨幣,但需要注意的是實際利率可能因結賬時間而異?

+0

是的,我已經考慮過了。我可以保持簡單,然後...如果費率每天更新一次,無所謂 – Mark 2010-01-14 14:31:22

+0

我已經看到在我瀏覽過的一些在線商店中採用了這種方法,所以有一個先例。 – 2010-01-14 14:36:57

+0

這是ebay如何做的例子。 – 2010-01-14 14:41:21

0

您可以更改會話的默認生存期 - 它存儲在php.ini變量session.gc_maxlifetime中。默認值是1440(24小時),之後會話將被以下垃圾回收清除。

變量可以直接編輯(文件)或ini_set

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

編輯

可以增加使用的變量任何給定的調用運行垃圾收集的可能性session.gc_probabilitysession.gc_divisor。文檔在http://www.php.net/manual/en/session.configuration.php

0

讓我們做危險的事情。

是否可以使用$ _SERVER作爲應用程序範圍的全局對象,類似於ASP的Application對象?如果沒有,是否有PHP應用程序對象?

如果是這樣,你可以存儲在$ _ SERVER的匯率,然後更新它在必要時(如貝寶更新它的匯率)

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'); 

對於高速緩存使用APCmemcached

+0

感謝您的意見。我認爲這是一個很好的解決方案。我目前還沒有實現緩存......當我這樣做時,我會回頭看看這個解決方案。 – Mark 2010-01-14 14:57:48

相關問題