[perlメモ]Cache::FileCacheではPurgeではなくpurgeを使うべきらしい。

Internal Server Errorに成っていたので何事かと思って調べてみるとダウンロードしてきたニュースサイトのRSSが破損してて、RSSの解析に失敗してエラーになっていたのでファイルが壊れる原因といえば大抵の場合ディスクがあふれた場合なのでディスク容量を見てみると案の定3GB使い切ってました。とりあえず、キャッシュをすべて削除すると2.5GBあきましたw。とりあえずキャッシュ期間を1時間に短縮して様子を見てみたのですが、どうも期限切したキャッシュが削除されていないようです。

検索してみると、たぶんもともと参考にさせていただいたと思われる記事を発見。

Cache::FileCache – re_その辺の空気とか
そして、記事についているコメントとトラックバックに気になる記述を発見。

Cache::FileCache の purge と Purge – makogの日記

どうやら、期限切れキャッシュの削除にはPurge()とpurge()というメソッドがあり、Purge()の場合は引数でパスを指定してあげる必要がある人のこと。そして、purge()だと引数指定なしでnamespace内の期限切れキャッシュをすべて削除してくれるとのこと。

なるほど、それで期限切れキャッシュが消えないわけか。ということで、Purge()をpurge()に書き換えてみました。

すると、期限切れキャッシュの削除に時間がかかってアプリがタイムアウトw。

先に一度今までのキャッシュは削除してしまった方が良さそうです。

先に今までのキャッシュを全て削除してから様子を見ていますが今のところ調子良さそうです。キャッシュの保存期間を1日の86400秒に戻してみたので2、3日様子を見てみます。これでアプリがタイムアウトするようならキャッシュ期間の調整やキャッシュの削除をcronなどを使って定期的に行う必要がありそうです。

追記(2010.02.13)
86400秒(24時間)だと30秒でタイムアウトするように指定している処理がタイムアウトし始めた。ちょっとキャッシュの削除に時間がかかりすぎなようだ。これでは、キャッシュを行って高速に読み出すという意味がなくなるので、面倒だけど、キャッシュの削除処理は別処理にしてcronで1時間ごとにでも呼び出した方がいいように思う。その方向で検討したいと思う。これだと自前のキャッシュ処理と大して変わらなくなってしまうw。とりあえずの対策としてキャッシュ期間を半分の43200秒にしてみた。

タグ :