趣味のプログラム工房

Cache::SizeAwareFileCache

楽天ウェブサービスのレスポンスキャッシュするためにCache::SizeAwareFileCacheを使用し始めました。
Cache::SizeAwareFileCacheCache::FileCacheの拡張版でキャッシュサイズの制限をかけることが出来ます。
通常のCache::FileCacheは時間だけ。

使用例
use Cache::SizeAwareFileCache;
my $cache =
new Cache::SizeAwareFileCache( { 'namespace' => 'MyNamespace',
'default_expires_in' => 60*60*6,#6時間
'max_size' => 10000,'cache_root' => 'res_cache' } );

cache_rootフォルダの中にnamespaceフォルダを作ってその中にキャッシュが保存されます。


xreaでCache::SizeAwareFileCache

Cache::SizeAwareFileCacheを使おうと思ったのですが、私の使っているXreaサーバでは残念ながらモジュールが入っていないようです。
そこで、自前でperlのモジュール(pmファイル)をダウンロードしてきてxreaサーバにアップロード。

activeperlの場合
ppm install Cache::FileCache
でローカルにインストールできます。
インストールされたモジュールは、perlのインストールフォルダの下\site\libにあります。(Cacheフォルダ)
アップロードはフォルダすること。

アップロードしたモジュールを使うには
xreaの場合の例
use lib qw(/virtual/ユーザID/public_html/module);

とします。(moduleフォルダの下にCacheモジュールを入れた場合)
あとはモジュールをuseすればOK
これで使えるはずです。

キャッシュ実装で高負荷

キャッシュを使い始めたらキャッシュを探す処理でかなりの負荷が掛かっているらしく余計遅くなってしまいましたorz
ということで、キャッシュサイズの調整が必要です。大きければいいわけでもないらしいです。

と、思っていたのですが、どうやら別の可能性が出てきました。
Cache::FileCacheにはキャッシュの生存時間を制限する機能(default_expires_inで指定した時間)があるのですが、期限の切れたキャッシュを削除するメソッドとして Purge()があります。
どうやらこのメソッドを毎回動かしていたのが高負荷の原因の可能性が高いです。
また、max_sizeの指定についても負荷が高いらしく、より、負荷を下げたいのであれば、max_sizeは指定せずに、定期的にlimit_size( )メソッドを使用するのがいいみたいです。
(max_sizeを指定するとキャッシュを使用する度にlimit_sizeメソッドを実行するようなものなので指定しない方が低負荷なのは当たり前ということですね。)