0

我有一项从天气 API 中提取的服务,它只允许我每天调用它 500 次,因为我找不到任何具有每小时数据的免费天气 API。该服务调用 api,该 api 每次用户点击页面时都会返回一个 JSON 数组。

由于我是目前唯一使用该服务的人,这不是问题,但对于未来,我希望缓存搜索结果并在一两个小时后让它们过期,因为数据变化相当频繁。

因此,如果用户输入他们的 zip,则结果将被缓存 2 小时。如果他们按下刷新,它将从缓存中提取保存的数据,或者如果另一个用户进入并键入相同的 zip,它将从缓存中提取。

减少 API 请求总数的最佳方法是什么?我考虑过使用 SQL,但它似乎不太合适,因为数据有些动态,并且超过 50,000 多个拉链有许多不同的可能性。

4

3 回答 3

1

首先,我会准备一个包含以下字段的表格:request_sig, response_data, timestamp

这是我要遵循的“算法”:

  1. 用户请求天气信息。
  2. 获取 API 调用参数“giveMeWeather.com /zip/10001”并对它们进行哈希处理。
  3. 检查数据库中的哈希值(sig),如果我找到匹配项 => 则返回response_data.
  4. 如果我没有找到匹配项,请调用您的 API 并将响应存储在数据库中,然后将响应提供给客户端。
  5. 清理cronjob表并删除旧条目(检查timestamp旧条目)。

这不会解决 500 次调用的限制,但它是一个很好的解决方案。

于 2012-07-25T18:32:38.480 回答
1

为什么不使用 SQL 数据库?

这似乎相当简单。要记住的一件事是在每个 API 调用中捕获尽可能多的信息。如果 API 允许您一次获取不止一条信息,请尽可能多地获取,这样您就不必返回 API。

注意:此解决方案无法解决您只能访问 API 500 次的事实。它只是为您提供了一种方法,您不必在每个邮政编码中多次返回 API。

  1. 输入邮政编码
  2. 检查您的数据库以查看您是否已经存储了该 zip(如果有,请检查时间戳以查看是否要转到 API 以获取更新的信息)
  3. 如果它不在您的数据库中,请放置您的 API 调用并将返回的信息存储在数据库中,使用 Zip 作为识别数据
于 2012-07-25T21:53:39.690 回答
-2

有很多可用的缓存系统。您可以指定希望数据缓存多长时间,并且可以为保存的数据的每个部分提供自己的密钥。有些是 memcached、APC 和 XCache。我不确定他们是使用数据库、文件还是缓存什么。

于 2012-07-25T18:58:48.630 回答