缓存以前每小时更新的JSON搜索


Cache previous search for JSON updated hourly

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

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

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

减少API请求总量的最佳方法是什么?我曾考虑过使用SQL,但它似乎不太适合,因为数据在某种程度上是动态的,而且在50000多个zip中有很多不同的可能性。

为什么不使用SQL数据库?

这看起来相当直截了当。需要记住的一件事是,在每个API调用上捕获尽可能多的信息。如果API允许您一次获取不止一条信息,请尽可能多地获取,这样您就不必返回API。

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

  1. 记下邮编
  2. 检查您的数据库,看看您是否已经存储了该zip(如果存储了,请检查时间戳,看看是否要转到API获取新信息)
  3. 如果它不在您的数据库中,请放置API调用,并使用Zip作为识别数据将返回的信息存储在数据库中

首先,我要准备一个包含以下字段的表:request_sigresponse_datatimestamp

以下是我要遵循的"算法":

  1. 用户请求天气信息
  2. 取API调用参数"giveMeWeather.com /zip/10001"并进行哈希
  3. 检查数据库中的散列(sig),如果我找到匹配=>则返回response_data
  4. 如果找不到匹配,请调用API并将响应存储在数据库中,然后将响应提供给clinet
  5. cronjob清洁表格并删除旧条目(检查timestamp中的旧条目)

这并不能解决500个呼叫的限制,但这是一个很难解决的问题。

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