3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHP+テキストデータで擬似キャッシュを作る

Last updated at Posted at 2015-08-25

やりたいこと

負荷の高いphpコードの実行回数を減らし、負荷を抑制したい。
Cache::Lite も memchaced も使えない環境で、テキストデータで擬似キャッシュファイルを生成し、負荷の軽減を試みる。

やろうとすること

  • PHPの実行結果をテキストファイルにデータを保存する
  • テキストファイル生成後、1分以内にアクセスがあったら、テキストの内容を出力する
  • テキストファイル生成後、1分経過したあとにアクセスがあったら、再度処理を行い、結果を出力後テキストデータを書き換える

書いてみた

<?php

// 処理速度の開始時間を記録
$time_start = microtime(true);

// 擬似キャッシュファイルを定義
$cache = "cache.txt";

// 擬似キャッシュファイルが存在しない場合、ファイルを生成する
if(!file_exists($cache)){

  touch($cache);
  echo("擬似キャッシュファイルを生成しました。\n");

}

// 擬似キャッシュファイルの中身を読み込み、生成時間が60秒以内かを確認する
// 60秒以上経っている場合、フラグを立てる

$genTime = filemtime($cache);
$cacheTime = 60;

if(($genTime + $cacheTime) < time() ){

  $cacheFlag = 1;

}

// 擬似キャッシュファイルがNullの場合、もしくは擬似キャッシュが生成後1分経っていた場合、関数genCacheを実行する。生成後の時間確認には関数checkTimeを使う。擬似キャッシュファイルの内容が存在する場合、その内容を表示する。

$cachedata = file_get_contents($cache);

if ( !isset($cachedata) || isset($cacheFlag) ){

genCache();

}  else  {

print ($cachedata);
print ("キャッシュデータが存在したため、その内容を出力しました。\n");

}

// 関数genCacheを定義。
// 日付データを生成してその内容を出力後、擬似キャッシュファイルへ内容を書き込む


function genCache(){
  $cache = "cache.txt";
  $currentDate = date("Y年m月d日 H時i分s秒");

  echo $currentDate;
  echo ("関数genCacheからデータを出力");

  file_put_contents($cache, $currentDate, LOCK_EX);
  echo("擬似キャッシュファイルへの書き込み完了");

// 実際の処理。ここではテスト用にループを回す

for( $i=0; $i<10000; $i++ ){
 
}

}

// 処理速度の終了時間を計測
$timelimit = microtime(true) - $time_start;
echo $timelimit . ' seconds';

?>

実行してみた

2015年08月25日 10時13分54秒
関数genCacheからデータを出力擬似キャッシュファイルへの書き込み完了
0.010881900787354 seconds

2015年08月25日 10時13分54秒
キャッシュデータが存在したため、その内容を出力しました。 
0.00022101402282715 seconds

2015年08月25日 10時13分54秒
キャッシュデータが存在したため、その内容を出力しました。 
0.00016689300537109 seconds

2015年08月25日 10時15分01秒
関数genCacheからデータを出力擬似キャッシュファイルへの書き込み完了
0.00077390670776367 seconds

少しはキャッシュの役割を果たせているでしょうか。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?