案ずるより産むが易し 意外と簡単 楽天ウェブサービスを使ってみる(3)

前回、前々回で、楽天ウェブサービスの利用方法を解説しました。今回は、キャッシュ機能を取り入れるというお話です。

キャッシュというと、お金、現金のことを思い受けべるかも知れませんが、それは「cash」。ここでいうキャッシュとは「cache」で、貯蔵所とか貯蔵物という意味のもので、その貯蔵物とはウェブサービスで得たデータのことです。

ウェブサービスで得たデータを保存しておいて、次回に同じデータを読み込むリクエストがきた時には、保存しておいたデータを使うようにします。そうすることによって高速に処理することができるようになります。ウェブサービスの場合のキャッシュは、高速処理のためという面もありますが、提供業者のサーバー負荷を軽減するという目的で実装されます。

ページが読みこまれる度にリクエストを送り、サーバーがそれに応えてデータを送っていると、サーバーがパンクしてしまいます。提供業者によっては、単位時間のリクエスト回数を制限しているところがあるのもそのためです。

で、利用者はどうするかというと、一度サーバーから読みこんだデータを自分のサイトに保管しておき、同じデータを使う場合には保管データを使うようにします。もしデータが保管されてなかったら、ウェブサービス提供のサーバーにリクエストを出し、返ってきたデータを自分のサーバーに保管するようにします。こうすることによって、サーバー負荷を軽減し、リクエスト制限に引っかからないようにします。

このキャッシュの仕組みを作るには、Cache_Lite を使います。

Cache_Lite Download

から最新版をダウンロードし、解凍します。「Cache」というディレクトリがあるので適当な場所にアップロードします。(他のディレクトリは不要です)

任意の場所にキャッシュファイル保存用のディレクトリを作成しておきます。先のダウンロードした「Cache」の中に作成する手もありますが、Cache_Liteのアップデート時に消してしまうこともあるので、自分の場合は別ディレクトリに作成しています。

<?php

require_once "./common/Cache/Lite.php";			//	Cache_Lite読み込み

//--------------------------------------キャッシュオプション設定
	$cacheOptions = array(
		'cacheDir' 				=> './temp_cache/', //キャッシュファイルの保存先ディレクトリ
		'lifeTime' 				=> '86400', 		//キャッシュの有効期限(一秒単位)。例の86400は一日
		'automaticCleaningFactor' 	=> '20'			//新規キャッシュファイル保存時の期限切れファイル自動削除設定。1/20の確率で削除される
	);

	$Cache_Lite = new Cache_Lite($cacheOptions);		//オブジェクト生成

	$_CACHE_ID 	= $_PAGE_NO.$_KOBO_KEYWD.$_KOBO_JENRE_ID;// 重複しないキャッシュIDを生成します

	if($data = $Cache_Lite->get($_CACHE_ID)){	     //有効なキャッシュがある場合の処理	  
		  $sxmlStr = $data;  						 //キャッシュデータを変数にセット
	} else {									     //キャッシュがなかった場合の処理
 		 $sxmlStr = @file_get_contents ($_REQ_URL ); 	//APIリクエストする
		 $Cache_Lite->save($sxmlStr,$_CACHE_ID);  	//キャッシュ保存
	}

	$sxmlData = simplexml_load_string($sxmlStr);		//xml文字列をsimpleXmlオブジェクトに変換
												//以降xmlオブジェクト($xmlData)を処理する
?>