0

1 時間ごとのデータを持つ優れた無料の天気 API が見つからないため、1 日に 500 回しか呼び出せない天気 API からプルするサービスがあります。このサービスは、現時点でユーザーがページにアクセスするたびに JSON 配列を返す API を呼び出します。

現在サービスを使用しているのは私だけなので問題はありませんが、将来的には検索結果をキャッシュし、データが頻繁に変更されるため、1、2 時間後に期限切れになることを望んでいました。

したがって、ユーザーが zip を入力すると、その結果は 2 時間キャッシュされます。更新を押すと、保存されたデータがキャッシュから取得されます。別のユーザーがアクセスして同じ zip を入力すると、キャッシュから取得されます。

API リクエストの合計を削減する最善の方法は何ですか? SQL を使用することを考えましたが、データが多少動的であり、50,000 以上の zip を超えるさまざまな可能性があるため、適切ではないようです。

4

3 に答える 3

1

なぜ SQL データベースを使用しないのですか?

これはかなり簡単に思えます。覚えておくべき 1 つのことは、各 API 呼び出しでできるだけ多くの情報を取得することです。API で一度に複数の情報を取得できる場合は、できるだけ多くの情報を取得して、API に戻る必要がないようにしてください。

注:このソリューションは、API に 500 回しかアクセスできないという事実を回避するものではありません。これは単に、郵便番号ごとに複数回 API に戻る必要がない方法を提供するだけです。

  1. 郵便番号を入れる
  2. データベースをチェックして、その zip が既に保存されているかどうかを確認します (保存されている場合は、タイムスタンプをチェックして、API に移動して新しい情報を取得するかどうかを確認します)。
  3. データベースにない場合は、API 呼び出しを行い、Zip を識別データとして使用して、返された情報をデータベースに保存します。
于 2012-07-25T21:53:39.690 に答える
1

まず、次のフィールドを持つテーブルを準備します: request_sigresponse_datatimestamp

これが私が従う「アルゴリズム」です:

  1. ユーザーが天気情報をリクエストします。
  2. API 呼び出しパラメーター「giveMeWeather.com /zip/10001」を取得し、それらをハッシュします。
  3. データベースでそのハッシュ ( sig) を確認し、一致が見つかった場合 => を返しますresponse_data
  4. 一致するものが見つからない場合は、API を呼び出して応答をデータベースに保存し、応答をクリネットに提供します。
  5. cronjobテーブルをクリーニングし、古いエントリを削除します (古いエントリについては を確認してください) timestamp

これは 500 コールの制限を解決しませんが、チャッシング ソリューションです。

于 2012-07-25T18:32:38.480 に答える
-2

利用可能なキャッシュシステムはたくさんあります。データをキャッシュする期間を指定でき、保存されたデータの各セクションに独自のキーを与えることができます。一部は、memcached、APC、および XCache です。データベースを使用するのか、ファイルを使用するのか、何をキャッシュするのか、具体的にはわかりません。

于 2012-07-25T18:58:48.630 に答える