Php 在CodeIgniter中缓存货币转换率的最佳方法

Php 在CodeIgniter中缓存货币转换率的最佳方法,php,codeigniter,Php,Codeigniter,我的购物应用程序需要进行货币转换,我的计划是使用crontab每小时获取一次最新汇率。我的问题是,在我的CI应用程序中存储和使用它的最佳方式是什么。我应该: -每次运行时将其写入DB,然后在每次需要进行转换时从DB获取速率 -执行相同的操作,但使用文本文件 -将其写入index.php中的常量 -某种核心或钩子文件 最有效的方法是什么?我认为最常见的方法(也是最有效的)是在数据库中有一个货币表 每种货币和汇率都有自己的行 根据选择的区域设置,在每个页面请求上从数据库中获取适当的货币信息 将价格

我的购物应用程序需要进行货币转换,我的计划是使用crontab每小时获取一次最新汇率。我的问题是,在我的CI应用程序中存储和使用它的最佳方式是什么。我应该: -每次运行时将其写入DB,然后在每次需要进行转换时从DB获取速率 -执行相同的操作,但使用文本文件 -将其写入index.php中的常量 -某种核心或钩子文件


最有效的方法是什么?我认为最常见的方法(也是最有效的)是在数据库中有一个货币表

  • 每种货币和汇率都有自己的行
  • 根据选择的区域设置,在每个页面请求上从数据库中获取适当的货币信息
  • 将价格显示包装在执行货币转换(基础货币的简单乘法)的函数中

    • 快速而肮脏的方法是用上述货币编写一个PHP文件。您可以使用来安全地保存它们

      配置:

      $file = '/path/to/currencies.php';
      
      Cronjob:

      // get data from API (note: you should use proper functions via CURL)
      $currencies = file_get_contents('http://some.api.com/currencies');
      // decode data
      $currencies = json_decode( currencies );
      // export data into PHP format
      $currencies = var_export( currencies, true );
      // save to file
      file_put_contents($file, "<?php\r\n $currencies=".$currencies."; \r\n?>");
      

      请注意,我们甚至不连接到DB的任何地方,使这非常快。也没有解析/转换。使用DB概念,您必须至少循环数据库行。使用普通的配置介质,如ini、json或xml文件,需要在加载PHP后进行某种形式的解析。然而,使用这种方法,它是PHP加载过程的一部分;您只需要包含一个小的PHP文件。

      高效吗?你敢打赌吗?假设缓存正确,是的。等等,那么DB没有被用作缓存?;)数据库肯定可以用作某些对象的缓存存储。这并不是说在这种情况下它是最好的,但事实上,每次会话一次查询从db获取速率信息的影响是最小的,除非你是为高流量网站开发的。问题是一个页面上可能有20个价格,理想情况下,我希望每个会话获取一次速率,并在此速率的基础上进行转换-基本上是静态数据-只是读取,不需要数据库。不过,每小时保存到DB并写入缓存一次是可以的,但为什么呢?无论哪种方式,您都肯定希望将其写入文件,而不是从数据库中查找。
      // ensure you get a default something
      $currencies = array();
      // load data file (note, we use include so we can load it whenever we want)
      @include $file;
      // output something from array
      echo $currencies['EUR'];