EntryFullTextのキャッシュを自動削除#2

めざせchangeset/1000ということで、ここで公開したEntryFullTextのキャッシュを自動削除するパッチを更新して見ました。以前のパッチではpurgeが頻繁に発生し、キャッシュが増える以上に負荷が酷かったと思います。

そこでpurgeするタイミング(確率)を指定できるようにしてみました。


タイミング(確率)といっても、time % probabirity == 0な場合ですので過度な期待は禁物ですが、購読しているFeedの数が多くて、キャッシュサイズが気になる人には有用だと思います。いつかは削除されますので。

ちなみに、Ticket#306に別方法で登録されていますので、それまでのつなぎです。

 Index: svn/plagger/lib/Plagger/Cache.pm
===================================================================
--- svn/plagger/lib/Plagger/Cache.pm (リビジョン 941)
+++ svn/plagger/lib/Plagger/Cache.pm (作業コピー)
@@ -14,6 +14,7 @@
$conf->{class} ||= 'Cache::FileCache';
$conf->{params} ||= {
cache_root => File::Spec->catfile($conf->{base}, 'cache'),
+ default_expires_in => $conf->{expires} || 'never',
};

$conf->{class}->require;
@@ -28,6 +29,7 @@
my $self = bless {
base => $conf->{base},
cache => $conf->{class}->new($conf->{params}),
+ probabirity => $conf->{probabirity} || 100,
}, $class;
}

@@ -55,6 +57,10 @@

my $hit_miss = defined $value ? "HIT" : "MISS";
Plagger->context->log(debug => "Cache $hit_miss: $_[0]");
+ if (time % $self->{probabirity} == 0) {
+ $self->{cache}->purge();
+ Plagger->context->log(info => "Cache purge");
+ }

$value;
}

設定は以下の通り

 global:
cache:
expires: 604800
probabirity: 100

上記の設定では、1週間(expires:604800=60*60*24*7)経ったキャッシュを削除登録し、100回キャッシュを検索(probabirity:100=1%)したときに、1度削除登録されたキャッシュを削除します。