ふそうごむ。by扶桑ゴム産業

扶桑ゴム産業の最新情報とうぇぶますたあ「TKYK」の個人的日記。

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など他の場合はうまくいくような??よくわからんのぉ。ま、うまくいったからよしとすべきか。(いいかげんだなぁ)