代码之家  ›  专栏  ›  技术社区  ›  Parker

缓存通过API获取的在线价格,除非它们发生变化

  •  1
  • Parker  · 技术社区  · 14 年前

    我目前正在一个网站上工作,该网站向eBay和Amazon等知名网上卖家打了几个电话,以获取某些商品的价格。问题是,目前加载结果需要几秒钟(据我所知,这一次是从打电话开始),我希望更迅速(我认为大约10秒钟太长了)。

    我已经缓存了其他需要获取的信息,但这些信息是静态的。有没有一种方法可以缓存价格,但只在需要时更新?代码在python中,我将信息存储在mysql数据库中。

    我一直在考虑使用chron或者其他类似的方法来经常更新它,但是如果有一个更简单、更不激烈的方法来解决这个问题,那就更好了。

    谢谢!

    4 回复  |  直到 14 年前
        1
  •  2
  •   Byron Whitlock    14 年前

    您是否考虑过显示缓存数据,然后通过Ajax回调更新价格?如果价格随SO类型通知栏或类似栏而改变,您可以通知用户。

    这样用户就可以立即获得结果,并在价格可用时更新价格。

    编辑

    您可以使用jquery:

    假设您有脚本名 getPrices.php 它返回一个项目ID的JSON数组,它是price。

    这里没有错误处理等,只是给你个主意

     My necklace: <div id='1'> $123.50 </div><br>
     My bracelet: <div id='1'> $13.50 </div><br>
     ...
    
     <script>
     $(document).ready(function() {
       $.ajax({ url: "getPrices.php", context: document.body, success: function(data){
          for (var price in data)
          {
              $(price.id).html(price.price);
          }
        }}));
     </script>
    
        2
  •  3
  •   Community CDub    8 年前

    您可以使用memcache进行缓存。第一个请求将很慢,但剩余的请求应该是即时的。不过,你需要一个cron作业来更新它。更多缓存信息: Good examples of python-memcache (memcached) being used in Python?

        3
  •  2
  •   calvinf    14 年前

    您需要在应用程序中处理以下内容:

    1. 得到价格
    2. 确定价格是否发生变化
    3. 缓存价格信息

    对于步骤1,您需要考虑项目价格的变化频率。我会按照你的直觉为一个进程设置一个cron作业,该进程将按设置的间隔检查项目(或项目集)的新价格。这在小规模上是微不足道的,但是当您拥有数万个项目时,这个系统的架构将变得非常重要。

    为了避免页面加载延迟,请尽量提前获取信息。我不知道您的用例,但是最好尽可能多地预取信息,避免让用户等待异步JavaScript调用完成。

    对于步骤2,如果它是一个新项目或者价格发生了变化,请更新缓存系统中的信息。

    对于步骤3,您需要确定适合您需要的最佳缓存系统。正如其他人所说, memcached 是一个可能的解决方案。有很多种” NoSQL “您可以在MySQL中签出甚至缓存结果的数据库。

        4
  •  0
  •   Andy Hammerlindl    14 年前

    你是怎么拿到价格的?如果您使用诸如BeautifulSoup之类的工具从普通的HTML页面中删除数据,这可能会减慢往返时间。在这种情况下,在解析前,从页面计算快速校验和(如MD5)可能会有所帮助,以查看它是否已更改。如果您使用的API提供了一个简短的XML版本的价格,这可能不是问题。