APIやデータベースの取得結果をキャッシュする
ウェブサイトでAPIを利用したり、DB(データベース)から取得したデータをHTML表示する場合、これらのデータをキャッシュさせると様々なメリットがあります。
そもそもウェブサービスなどのAPIには大概リクエスト回数に制限がありますし、APIリクエストしてレスポンス結果を処理してHTML表示するにはそれなりの負荷がかかります。
また、負荷だけでなくAPIのレスポンスに時間がかかる場合はそのままスピードの問題になります。
DBの場合もsqlクエリの実行は負荷がかかりますしスピードも遅くなります。
ですので、APIレスポンスやDBのデータ(一日に一度しか更新しないDBデータなど)に秒単位のリアルタイム性がない場合はこれらの取得データを一定時間毎にキャッシュする事で、負荷・スピード面を大きく改善する事が可能です。
そもそもウェブサービスなどのAPIには大概リクエスト回数に制限がありますし、APIリクエストしてレスポンス結果を処理してHTML表示するにはそれなりの負荷がかかります。
また、負荷だけでなくAPIのレスポンスに時間がかかる場合はそのままスピードの問題になります。
DBの場合もsqlクエリの実行は負荷がかかりますしスピードも遅くなります。
ですので、APIレスポンスやDBのデータ(一日に一度しか更新しないDBデータなど)に秒単位のリアルタイム性がない場合はこれらの取得データを一定時間毎にキャッシュする事で、負荷・スピード面を大きく改善する事が可能です。
phpのサンプルプログラム(pearのCache_Lite)
以降では、キャッシュ機能をphpで実現する方法をphpプログラムのサンプルをあげて説明します。
phpではpearのCache_Liteを利用する事でキャッシュ機能を実現できます。
それでは、以下にphpのサンプルプログラムを示します。
プログラムの説明は各コメントを参考にしてください。
サンプルプログラムではキャッシュする保存場所をcacheディレクトリに指定していますので、事前にcacheディレクトリを作成して書込み権限を与えておく必要があります。
このサンプルプログラムを実行すると、cacheディレクトリ内にキャッシュファイルが作成され、そのキャッシュファイルの中身を見てみるとキャッシュされたHTMLが書かれている事が確認できると思います。
また、上のサンプルプログラムではWebAPIから受け取ったxmlファイルをhtmlに整形してからキャッシュしています。WebAPIから受け取ったxmlファイルをキャッシュしたいという方は「simplexml_load_fileで取得したxmlオブジェクトがpearのCache_Liteでキャッシュできない ~ 解決策」を参考にしてください。
参考サイト
Pear Cache_Liteのマニュアル
phpではpearのCache_Liteを利用する事でキャッシュ機能を実現できます。
それでは、以下にphpのサンプルプログラムを示します。
<?php
//Cache_Liteを利用するためのファイル読込み
require_once("Cache/Lite.php");
//キャッシュオプションを設定した変数の作成
$cacheOptions = array(
'cacheDir' => './cache/', //キャッシュディレクトリをcacheに設定
'lifeTime' => '600', //キャッシュデータ保持する時間を10分間に設定(秒単位)
);
//キャッシュID設定(ID毎にキャッシュする。ここではキャッシュIDを固定(testId)していますが、実用性を考えるとこの変数は動的に扱うことになると思います。)
$cacheId = "testId";
//Cache_Liteオブジェクト生成
$Cache_Lite = new Cache_Lite($cacheOptions);
//$Cache_Lite->get($cacheId)で指定したIDの有効なキャッシュデータが
//キャッシュディレクトリに存在するかどうかを返す。
if($data = $Cache_Lite->get($cacheId)){
//有効なキャッシュがある場合の処理
//キャッシュデータを表示
echo $data;
}else{
//有効なキャッシュがない場合の処理
//HTMLデータを作成
$data = getHtmlData();
//生成したデータを表示
echo $data;
//データをキャッシュ保存
$Cache_Lite->save($data,$cacheId);
}
//HTMLデータの作成関数
function getHtmlData(){
$retStr = "";
//ここで、APIリクエストやDBデータの取得などキャッシュしたいHTMLを作成する
・・・
return $retStr;
}
?>
プログラムの説明は各コメントを参考にしてください。
サンプルプログラムではキャッシュする保存場所をcacheディレクトリに指定していますので、事前にcacheディレクトリを作成して書込み権限を与えておく必要があります。
このサンプルプログラムを実行すると、cacheディレクトリ内にキャッシュファイルが作成され、そのキャッシュファイルの中身を見てみるとキャッシュされたHTMLが書かれている事が確認できると思います。
また、上のサンプルプログラムではWebAPIから受け取ったxmlファイルをhtmlに整形してからキャッシュしています。WebAPIから受け取ったxmlファイルをキャッシュしたいという方は「simplexml_load_fileで取得したxmlオブジェクトがpearのCache_Liteでキャッシュできない ~ 解決策」を参考にしてください。
参考サイト