Cache::FileCacheでキャッシュ
前回のGoogle検索結果取得ルーチンにキャッシュ機能を追加してみた。
use Cache::FileCache;my $cache = new Cache::FileCache( ¥%cache_opt );
--
my $google_response = $cache->get($google_json_url);
# キャッシュを呼んでみる
if (!$google_response) { #キャッシュがなかった
$google_response = $ua->get($google_json_url);
# 投げて返してもらう
}
my $google_results = $json->decode($google_response->content);
if ($google_results->{estimatedCount} > 0) {
#1件以上のデータがあったら
$cache->set($google_json_url, $google_response);
#キャッシュにしまう
}
今のところ、いい感じです[:楽しい:]
追記:
いい感じだったハズだったのですが、ローカルと違いなぜかエラーログが…。
ということで戻しちゃいました(泣)原因究明病棟24時。
追記2:
原因は、どうやらメソッドへのハッシュデータをそっくり保存していたため、キャッシュ読み込み時におかしくなっていたようです。
ということで、以下のように修正。
my $google_response = '';
my $google_results = $cache->get($keycode); # キャッシュを呼んでみる
if (!$google_results) { #キャッシュがなかった
$is_cache = 'not cached';
$google_response = $ua->get($google_json_url); # 投げて返してもらう
$google_results = $json->decode($google_response->content);
}
my $total_count = $google_results->{estimatedCount} || '';#だいたいの総件数
$total_count =~ s/,//g; #カンマは削除する
if ($total_count > 0) { #1件以上のデータがあったら
$cache->set($keycode, $google_results); #キャッシュにしまう
}
追記3:
「メソッドへのハッシュデータをそっくり保存していたため」もちょっとあやしい度30%。Class::DBIなど他の場合はうまくいくような??よくわからんのぉ。ま、うまくいったからよしとすべきか。(いいかげんだなぁ)