状況

開発したリサーチツールで、Google Custom Search APIを利用しているけど料金が高いので安くしたいから工夫した

やったこと

Laravel標準のキャッシュ機能で検索結果を一定期間保存するように実装

Google Custom Search API利用料金

  • API呼び出し、1000回につき5ドル
  • 1日あたりのAPI呼び出し、100回までは無料

一日100回までの無料ボーナスがあるので、理想は毎日100回ずつAPIを利用できれば月間で約3000回リサーチを行っても無料になるので、まんべんなく毎日リサーチをするのが理想ではある。

でも、ツールを一般公開している以上、どうしても週末に利用量が集中するので、土日は100は超えてしまう。

これを解決したい。

対策案

利用ログを追ってみると、短時間内(数分以内)に同一ワードで検索している履歴が複数見られた。

Aというワードで検索、次にBを検索、その後再度Aのワードで検索、その後Bで以下略。

数分前のワードでのリサーチ結果をもう一回見たいという人が一定数いるということよね。

特定のキーワードによるAPIからのレスポンスデータを一定時間キャッシュして、同一ワードでリクエストが来たらキャッシュデータを返すようにしたらAPIの呼び出し回数は減るはず。

以下のように実装。(環境はlaravel)


    public function getRequest()
    {

        // cacheがあればそれを利用
        $cacheKey = "キーワードをハッシュ化したcachekeyを利用する";

        $value = Cache::get($cacheKey);
        if ($value) {
            return $value;
        }

        // キャッシュがないならデータ取得
        $value = "APIからデータ取得する処理";

        // キャッシュに保存(60秒 * 60 = 1時間)
        $cacheTime = 60 * 60;
        Cache::put($cacheKey, $value, $cacheTime);
        return $value;
    }

実装結果

結果としては今の所これで一日100回以下に抑えられた。

利用者が10倍になったらアウトなのでまたその時考える。