状況
開発したリサーチツールで、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倍になったらアウトなのでまたその時考える。
最近のコメント