繁体   English   中英

在哪里以及如何存储货币汇率?

[英]Where and how to store currency rates?

我写了一个脚本,每小时(当我的产品默认使用的货币)与每小时相比,获得paypals当前费率。

用户可以在其设置中设置其货币并存储在用户表中。

我最初的想法是将所有货币汇率存储在数据库中,然后在用户登录时将货币代码和汇率存储在会话中。 然后在每个价格附近,我有一个函数,它将价格乘以用户价格,并在最后附加货币代码。

我唯一担心的是会话变量可能存在一段时间,并可能使价格完全错误。

我应该只存储他们的货币代码并将费率存储在内存表或文件系统中以便快速访问,并让价格转换功能访问它,而不是将费率存储在会话中吗? 因此价格与费率一样最新。

这通常是如何实现的?

您是否可以用他们定价的货币显示价格,并显示用户所选货币的近似价格,但需要注意的是实际汇率可能会在结账时有所不同?

只需缓存从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

您可以更改会话的默认生存期 - 它存储在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

让我们做危险的事情。

是否可以将$ _SERVER用作应用程序范围的全局对象,类似于ASP的Application对象? 如果没有,是否有PHP应用程序对象?

如果是这样,您可以将货币汇率存储在$ _SERVER中,然后在必要时更新(例如,当Paypal更新其汇率时)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM